SSL / TLS सुरक्षित चैनल - SOAP के लिए विश्वास संबंध स्थापित नहीं कर सका


325

मेरे पास एक साधारण वेब सेवा कॉल है, जो .NET (C #) 2.0 विंडोज़ ऐप द्वारा उत्पन्न होती है, जो विजुअल स्टूडियो द्वारा बनाई गई वेब सेवा प्रॉक्सी के माध्यम से सी # (2.0) में लिखी गई वेब सेवा के लिए भी है। इसने कई वर्षों तक काम किया है, और ऐसा दर्जन भर स्थानों पर किया जा रहा है जहाँ यह चल रहा है।

एक नई साइट पर एक नया इंस्टॉलेशन एक समस्या में चल रहा है। वेब सेवा को लागू करने का प्रयास करते समय, यह संदेश के साथ विफल हो जाता है:

SSL / TLS सुरक्षित चैनल के लिए विश्वास संबंध स्थापित नहीं कर सका

वेब सेवा का URL SSL (https: //) का उपयोग करता है - लेकिन यह लंबे समय से काम कर रहा है (और ऐसा करना जारी है) कई अन्य स्थानों से।

मैं कहाँ देखूँ? क्या यह विंडोज और .NET के बीच एक सुरक्षा मुद्दा हो सकता है जो इस इंस्टॉल के लिए अद्वितीय है? यदि हां, तो मुझे विश्वास संबंध कहां स्थापित करना है? मैं हार गया हूं!


मेरे मामले में यह त्रुटि IP पते अग्रेषण के कारण हुई थी।
cja

जवाबों:


166

विचार (अतीत में दर्द पर आधारित):

  • क्या आपके पास सर्वर के लिए DNS और लाइन-ऑफ-विज़न है?
  • क्या आप प्रमाण पत्र से सही नाम का उपयोग कर रहे हैं?
  • क्या प्रमाण पत्र अभी भी मान्य है?
  • एक बुरी तरह से कॉन्फ़िगर किया गया लोड बैलेंसर चीजों को गड़बड़ कर रहा है?
  • क्या नई सर्वर मशीन में घड़ी सही ढंग से सेट है (यानी यूटीसी समय सही है [स्थानीय समय पर ध्यान न दें, यह काफी हद तक अनियमित है]) - यह निश्चित रूप से WCF के लिए मायने रखता है, इसलिए नियमित SOAP को प्रभावित कर सकता है?
  • क्या कोई प्रमाणपत्र ट्रस्ट चेन समस्या है? यदि आप सर्वर से साबुन सेवा तक ब्राउज़ करते हैं, तो क्या आप एसएसएल प्राप्त कर सकते हैं?
  • उपरोक्त से संबंधित - क्या प्रमाण पत्र सही स्थान पर स्थापित किया गया है? (आपको विश्वसनीय रूट प्रमाणीकरण प्राधिकारी में एक प्रति की आवश्यकता हो सकती है)
  • सर्वर का मशीन-स्तरीय प्रॉक्सी सही ढंग से सेट है? (जो उपयोगकर्ता के प्रॉक्सी से अलग है); XP / 2003 के लिए प्रॉक्सिफ़ग देखें (विस्टा आदि के बारे में निश्चित नहीं)

2
1) वेब सेवा वेब पर है। हम ब्राउजर के जरिए इसे ब्राउज कर सकते हैं। 2) नई मशीन एक सर्वर नहीं है - यह एक डेस्कटॉप है जो मेरा ऐप चला रहा है, जो एसओएपी सेवा 3 के माध्यम से ऑर्डर की जानकारी और अपलोड इकट्ठा करता है। हां, हम इसे ब्राउज़ कर सकते हैं। 4) यह मेरे लिए नया है: मशीन स्तर प्रॉक्सी?
रोब स्क्रिप्समा

2
हाँ; कोड IE प्रॉक्सी सेटिंग्स का उपयोग नहीं करता है; यह एक अलग स्टोर का उपयोग करता है ... यह महत्वपूर्ण है कि यह कॉन्फ़िगर किया गया है (यदि आप प्रॉक्सी का उपयोग कर रहे हैं)। XP पर, IE सेटिंग्स को आयात करने के लिए सबसे आसान विकल्प (IIRC) "प्रॉक्साइफग-आई" है।
मार्क ग्रेवेल

11
धन्यवाद मार्क। इससे मुझे मदद मिली और समस्या यह थी कि सर्वर के पास 3rd पार्टी CA द्वारा हस्ताक्षरित एक प्रमाणपत्र था जिस पर मुझे अभी तक भरोसा नहीं था। इसका हल उस सीए को ट्रस्टेड रूट सीए सूची में जोड़ना था।
पी.कैम्पबेल

1
इस अपवाद वाले कंप्यूटर में समय सर्वर का उपयोग करके सिस्टम समय को सिंक करने में असमर्थ था। मुझे इसमें जाना था और काम करने से पहले मैन्युअल रूप से सिंक करना था।
क्रिस - Haddox Technologies

4
आप इसे प्राप्त कर सकते हैं यदि आप फ़िडलर का उपयोग सेवा कॉल को डीबग करने के लिए कर रहे हैं और इसका उपयोग प्रमाणपत्र अवरोधन मोड में किया है। बस फिडलर के विकल्पों में अवरोधन को हटा दें और आपको अच्छा होना चाहिए
रस्किन

363

निम्नलिखित स्निपेट उस मामले को ठीक कर देंगे जहां आपके द्वारा कॉल किए जा रहे सर्वर पर SSL प्रमाणपत्र में कुछ गड़बड़ है। उदाहरण के लिए, यह स्व-हस्ताक्षरित हो सकता है या प्रमाणपत्र और सर्वर के बीच होस्ट नाम मेल नहीं खा सकता है।

यह खतरनाक है यदि आप अपने प्रत्यक्ष नियंत्रण के बाहर एक सर्वर को बुला रहे हैं, क्योंकि आप अब यह सुनिश्चित नहीं कर सकते हैं कि आप उस सर्वर से बात कर रहे हैं जिसे आप सोचते हैं कि आप से जुड़े हैं। हालाँकि, यदि आप आंतरिक सर्वरों के साथ काम कर रहे हैं और "सही" प्रमाणपत्र प्राप्त करना व्यावहारिक नहीं है, तो प्रमाण पत्र की समस्याओं और बहादुरी से सिपाही की अनदेखी करने के लिए वेब सेवा को बताने के लिए निम्नलिखित का उपयोग करें।

पहले दो लैम्बडा एक्सप्रेशन का उपयोग करते हैं, तीसरा नियमित कोड का उपयोग करता है। पहला किसी भी प्रमाण पत्र को स्वीकार करता है। पिछले दो कम से कम यह जांचें कि प्रमाणपत्र में होस्ट नाम वह है जिसकी आप अपेक्षा करते हैं।
... उम्मीद है कि आपको यह उपयोगी लगेगा

//Trust all certificates
System.Net.ServicePointManager.ServerCertificateValidationCallback =
    ((sender, certificate, chain, sslPolicyErrors) => true);

// trust sender
System.Net.ServicePointManager.ServerCertificateValidationCallback
                = ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));

// validate cert by calling a function
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

// callback used to validate the certificate in an SSL conversation
private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
{
    bool result = cert.Subject.Contains("YourServerName");
    return result;
}

6
ServicePointManager के साथ मेरा अनुभव। इसमें कोई भी परिवर्तन पूरे ऐप डोमेन को प्रभावित करेगा। हालांकि इसका उत्तर बहुत स्पष्ट रूप से समझाया गया है कि यह कैसे लागू किया जा सकता है, मैं इस बिंदु को फेंकना पसंद करता हूं।
अमजथ

कॉलबैक सेट करना मेरे लिए .NET 4.5 में काम करता है, लेकिन .NET 4.6 पर नहीं
RJB

@ अमज़थ किसी विशेष अनुरोध के पूरा होने के बाद इसे रीसेट करने के बारे में कोई सुझाव? एक व्यक्ति को एक अप्रमाणित सर्वर से एक अनुरोध करने की आवश्यकता हो सकती है, फिर चीजों को वापस उसी तरह से डाल सकते हैं जैसे वे थे।
आइजैक लाइमैन

1
@ आईसैक लाइमैन: ServicePointManager.ServerCertificateValidationCallback = null;को डिफ़ॉल्ट व्यवहार पर वापस लौटना चाहिए।
माइक चेम्बरलेन

1
@MikeChamberlain आपके सुझाव के साथ एकमात्र समस्या यह है कि जब आप एक वैश्विक एप्लिकेशन सेटिंग के साथ काम कर रहे हैं, तो समवर्ती अनुरोध असुरक्षित हो सकते हैं।
आइजैक लाइमैन

178

बहुत ही सरल "कैच ऑल" समाधान यह है:

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

सेबस्टियन-कास्टल्डी से समाधान थोड़ा अधिक विस्तृत है।


21
मैंने #If CONFIG = "Debug"इसे केवल एक बयान में रखा है ताकि यह केवल डिबग मोड में सक्रिय हो। यह बहुत अच्छा काम करता है!
cjbarth

1
विवरण अच्छा हो सकता है, लेकिन कोड की त्वरित, छोटी और आसान रेखा के लिए भी कुछ कहा जाना है। यह कोड छोटा है और यह ट्रिक करता है।
एलन 1

क्या यह केवल वर्तमान क्रिया पर कार्य करेगा (जैसे ASP MVC का उपयोग किया जाता है)? या यह ASP.NET अनुप्रयोग के लिए डिफ़ॉल्ट व्यवहार के रूप में सेट होगा?
जीशान ली

2
इसका उपयोग केवल परीक्षण उद्देश्य के लिए किया जाना चाहिए, यह समाधान किसी भी प्रमाण पत्र पर भरोसा करता है, यहां तक ​​कि अमान्य / समाप्त हो गया है
शेनॉन

1
जैसा कि ऊपर की टिप्पणियों में बताया गया है, यह सत्यापित नहीं करता है कि एसएसएल कनेक्शन अब वैध है या नहीं। तो आपके सिस्टम और अन्य सिस्टम के बीच के कनेक्शन से समझौता हो सकता है। यह हमेशा एक सवाल है कि आपको इसके लिए क्या चाहिए।
रेमी

35

मैं व्यक्तिगत रूप से निम्नलिखित समाधान को सबसे अधिक पसंद करता हूं:

using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

... तो इससे पहले कि आप त्रुटि प्राप्त करने का अनुरोध करें, निम्नलिखित करें

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

ल्यूक के समाधान से परामर्श करने के बाद यह मिला


4
इस दृष्टिकोण के लिए सुरक्षा caveats के लिए सेबस्टियन कैस्टल्डी उत्तर देखें ।
एडवर्ड ब्रे

उत्पादन में इसका उपयोग करने का सुरक्षा जोखिम क्या है?
अमजद

@ अमजद सुरक्षा जोखिम यह है कि यह एसएसएल / टीएलएस के उपयोग के किसी भी लाभ को पूरी तरह से रोक देता है। सर्वर अपने पसंद का कोई भी प्रमाण पत्र प्रस्तुत कर सकता है, और यह कोड त्रुटि को नजरअंदाज कर देगा
1800 INFORMATION

18

यदि आप Windows 2003 का उपयोग कर रहे हैं, तो आप यह कोशिश कर सकते हैं:

Microsoft प्रबंधन कंसोल खोलें (प्रारंभ -> चलाएँ -> mmc.exe);

फ़ाइल चुनें -> स्नैप-इन जोड़ें / निकालें;

स्टैंडअलोन टैब में, ऐड चुनें;

प्रमाणपत्र स्नैप-इन चुनें, और जोड़ें पर क्लिक करें;

विज़ार्ड में, कंप्यूटर खाता चुनें और फिर स्थानीय कंप्यूटर चुनें। विज़ार्ड को समाप्त करने के लिए समाप्त दबाएं;

जोड़ें / निकालें स्नैप-इन संवाद बंद करें;

प्रमाणपत्र (स्थानीय कंप्यूटर) पर नेविगेट करें और आयात करने के लिए एक स्टोर चुनें:

यदि आपके पास प्रमाणपत्र जारी करने वाली कंपनी के लिए रूट CA प्रमाणपत्र है, तो विश्वसनीय रूट प्रमाणीकरण प्राधिकारी चुनें;

यदि आपके पास सर्वर के लिए प्रमाणपत्र है, तो अन्य लोगों को चुनें

स्टोर पर राइट-क्लिक करें और सभी कार्य चुनें -> आयात करें

विज़ार्ड का पालन करें और आपके पास प्रमाण पत्र फ़ाइल प्रदान करें;

उसके बाद, बस IIS को पुनरारंभ करें और वेब सेवा को फिर से कॉल करने का प्रयास करें।

संदर्भ: http://www.outsystems.com/NetworkForums/ViewTopic.aspx?Topic=Web-Services:-Could-not-establish-trust-relationship-for-the-SSL/TLS- ...


2
यह मुझे रास्ते का हिस्सा मिल गया, लेकिन मुझे इसे बनाने के लिए ट्रस्टेड रूट सर्टिफिकेशन अथॉरिटीज सेक्शन में सर्टिफिकेट की जरूरत थी। Blogs.msdn.com/b/jpsanders/archive/2009/09/16/… के
जैकब इवाल्ड

17

यदि आप हर किसी पर आंख मूंदकर भरोसा नहीं करना चाहते हैं और केवल कुछ मेजबानों के लिए एक ट्रस्ट अपवाद बनाना है, तो निम्न समाधान अधिक उपयुक्त है।

public static class Ssl
{
    private static readonly string[] TrustedHosts = new[] {
      "host1.domain.com", 
      "host2.domain.com"
    };

    public static void EnableTrustedHosts()
    {
      ServicePointManager.ServerCertificateValidationCallback = 
      (sender, certificate, chain, errors) =>
      {
        if (errors == SslPolicyErrors.None)
        {
          return true;
        }

        var request = sender as HttpWebRequest;
        if (request != null)
        {
          return TrustedHosts.Contains(request.RequestUri.Host);
        }

        return false;
      };
    }
}

इसके बाद जब आपका ऐप शुरू होगा तो Ssl.EnableTrustedHosts पर कॉल करें।


@ मुझे फिर से पढ़ना है मुझे लगता है कि मैंने पहली बार गलत पढ़ा होगा
शिव

उत्पादन में सभी प्रमाणपत्रों पर भरोसा करने का सुरक्षा जोखिम क्या है?
अमजद

@ अमजद सुरक्षा जोखिम यह है कि क्लाइंट और सर्वर के बीच कोई भी संचार के बीच में खुद को सम्मिलित कर सकता है, अपने स्वयं के एसएसएल प्रमाणपत्र का उपयोग कर सकता है और क्लाइंट और सर्वर के बीच सभी ट्रैफ़िक को पढ़ सकता है। ऐसा करने से SSL प्रभावी रूप से अमान्य हो जाता है।
बजे रोब प्राउज़

यह तब काम करना चाहिए जब iM wsdl से कक्षाएं उत्पन्न करने के लिए WCF एडऑन का उपयोग कर रहा हो?
कामिल

7

ल्यूक ने इस बारे में एक बहुत अच्छा लेख लिखा है .. बहुत सीधे आगे .. यह एक कोशिश दे

ल्यूक का समाधान

कारण (उनके लेख (ऋणात्मक शाप) से उद्धरण)) ".. ऊपर दिए गए कोड के साथ समस्या यह है कि अगर आपका वैध नहीं है तो यह काम नहीं करता। मैं एक वेब पेज पर पोस्ट क्यों करूंगा और अवैध SSL प्रमाणपत्र के साथ? क्योंकि मैं सस्ता हूँ और मुझे ऐसा नहीं लग रहा था कि मैं अपने टेस्ट बॉक्स के लिए एक सत्यापन के लिए वेरिसाइन या ** में से किसी एक का भुगतान करूं। इसलिए जब मैंने स्वयं हस्ताक्षर किया तो मुझे अनुरोध भेजा कि मुझे एक प्यारा सा अपवाद मिला।

System.Net.WebException अंतर्निहित कनेक्शन बंद कर दिया गया था। दूरस्थ सर्वर के साथ विश्वास संबंध स्थापित नहीं कर सका।

मैं आपके बारे में नहीं जानता, लेकिन मेरे लिए अपवाद कुछ ऐसा था जो मेरे कोड में एक मूर्खतापूर्ण गलती के कारण होगा जो POST को विफल कर रहा था। इसलिए मैं खोज करता रहा, और हर तरह की अजीब चीजें करता रहा। मेरे द्वारा गूँजने के बाद ही *** n बात मुझे पता चला कि एक अमान्य SSL प्रमाणपत्र का सामना करने के बाद डिफ़ॉल्ट व्यवहार इस अपवाद को फेंकना है। .. "


1
यह समाधान .Net 4.5 के लिए एक पदावनत है। यदि आप अभी सभी प्रमाणपत्र स्वीकार करना चाहते हैं, तो सेबेस्टियन कैस्टल्डी या मेरे उत्तर को और नीचे देखें।
रेमी

7

Microsoft का SSL डायग्नोस्टिक्स टूल समस्या की पहचान करने में मदद कर सकता है।

अद्यतन लिंक अब तय किया गया है।


7
आज (अगस्त 2012) तक, यह लिंक अब टूट गया है।
ashes999

डाउनलोड निर्देशिका की खोज की और कोई एसएसएल डायग्नोस्टिक्स टूल अब उपलब्ध नहीं है। :(
SASS_Shooter

2
हमें लिंक को ठीक करने दें। मुझे सही अगर मैं गलत हूँ iis.net/downloads/community/2009/09/...
Amzath

3

मुझे सिर्फ इस मुद्दे का सामना करना पड़ा। मेरा संकल्प समय सर्वरों को मैन्युअल रूप से समन्वयित करके सिस्टम समय को अद्यतन करने का था। ऐसा करने के लिए आप यह कर सकते हैं:

  • टास्क बार में घड़ी को राइट-क्लिक करें
  • चुनते हैं Adjust Date/Time
  • Internet Timeटैब का चयन करें
  • क्लिक करें Change Settings
  • चुनते हैं Update Now

मेरे मामले में यह गलत तरीके से सिंक हो रहा था इसलिए मुझे इसे सही ढंग से अपडेट करने से पहले कई बार क्लिक करना पड़ा। यदि यह गलत तरीके से अद्यतन करना जारी रखता है, तो आप सर्वर ड्रॉप-डाउन से भिन्न समय सर्वर का उपयोग करने का भी प्रयास कर सकते हैं।


पवित्र गाय। रन इस सटीक बात में स्मैक। आसान तय करने के लिए धन्यवाद!
TheGerm

3

इसे इस्तेमाल करे:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

ध्यान दें कि आपको कम से कम 4.5 .NET फ्रेमवर्क के साथ काम करना होगा


3

मुझे .NETइंटरनेट एक्सप्लोरर में ऐप में एक समान समस्या थी ।

मैंने विश्वसनीय संपादकों के प्रमाणपत्रों में प्रमाण पत्र (मेरे मामले में वेरिसाइन क्लास 3 प्रमाण पत्र) को जोड़ने की समस्या को हल किया।

Go to Internet Options-> Content -> Publishers and import it

यदि आप इसे निर्यात करते हैं तो आप प्रमाण पत्र प्राप्त कर सकते हैं:

Internet Options-> Content -> Certificates -> Intermediate Certification Authorities -> VeriSign Class 3 Public Primary Certification Authority - G5

धन्यवाद


1

मेरे पास यह त्रुटि थी कि url के साथ एक वेबसर्वर के खिलाफ चल रहा है:

a.b.domain.com

लेकिन इसके लिए कोई प्रमाणपत्र नहीं था, इसलिए मुझे डीएनएस कहा गया

a_b.domain.com

बस इस समाधान का संकेत यहाँ डाल रहा हूँ क्योंकि यह Google में शीर्ष पर आया था।


मेरे मामले में, वाइल्डकार्ड ssl प्रमाणपत्र (* .abcd.com) के तहत वेबसाइट को कॉन्फ़िगर किया गया था। जब कॉन्फ़िगर किया गया वेबसाइट बाइंडिंग xyz-abcd.com की तरह था जो समस्या का कारण बन रहा था।
श्री

1

उन लोगों के लिए जो वीएस क्लाइंट पक्ष के माध्यम से इस मुद्दे को सफलतापूर्वक एक बार सेवा संदर्भ जोड़ चुके हैं और पहली कॉल को निष्पादित करने की कोशिश कर रहे हैं, उन्हें यह अपवाद मिला: "अंतर्निहित कनेक्शन बंद हो गया था: एसएसएल / टीएलएस सुरक्षित चैनल के लिए विश्वास संबंध स्थापित नहीं कर सका" यदि आप IP पते के साथ एक एंडपॉइंट URL का उपयोग कर रहे हैं (मेरे मामले की तरह) और इसे अपवाद मिला, तो आपको संभवतः इस चरण को करने वाले सेवा संदर्भ को फिर से जोड़ना होगा:

  • Internet Explorer पर समापन बिंदु URL खोलें।
  • प्रमाणपत्र त्रुटि पर क्लिक करें (पता बार में लाल आइकन)
  • प्रमाणपत्र देखें पर क्लिक करें।
  • जारी किए गए को पकड़ो: "नाम" और आईपी पते या जो भी नाम हम उपयोग कर रहे थे उसे बदलें और इस "नाम" के लिए त्रुटि प्राप्त करें।

पुनः प्रयास करें :)। धन्यवाद


0

मेरे मामले में मैं IIS 7 का उपयोग करके अपने विज़ुअल स्टूडियो वातावरण में SSL का परीक्षण करने की कोशिश कर रहा था ।

यह वही है जो मैंने इसे काम करने के लिए समाप्त किया है:

  • IIS में दाईं ओर 'बाइंडिंग्स ...' अनुभाग में मेरी साइट के तहत, मुझे 443 पोर्ट में "https" बंधन जोड़ना होगा और "IIS एक्सप्रेस डेवलपमेंट सर्टिफिकेट" का चयन करना होगा।

  • दाईं ओर 'उन्नत सेटिंग्स ...' अनुभाग में मेरी साइट के तहत मुझे "http" से "https" में 'Enabled प्रोटोकाल' को बदलना था।

  • 'एसएसएल सेटिंग्स' आइकन के तहत मैंने ग्राहक प्रमाणपत्र के लिए 'स्वीकार' का चयन किया।

  • फिर मुझे ऐप पूल को रीसायकल करना पड़ा।

  • मुझे अपने व्यक्तिगत स्टोर में mmc.exe का उपयोग करके स्थानीय होस्ट प्रमाणपत्र भी आयात करना पड़ा।

मेरी web.configफ़ाइल पहले से ही सही तरीके से कॉन्फ़िगर की गई थी, इसलिए उपरोक्त सभी छांटने के बाद, मैं अपना परीक्षण जारी रखने में सक्षम था।


आपका web.config कैसे कॉन्फ़िगर किया गया था?
Chazt3n

@ Chazt3n मैं आपको यह नहीं बता सकता, कि कुछ समय पहले, लेकिन यह एक बुनियादी http बाइंडिंग सेट अप रहा होगा, मैं आमतौर पर वेब सेवा क्लाइंट जानकारी के लिए कॉन्फ़िगर जानकारी उत्पन्न करने के लिए svcutil का उपयोग करता हूं।
पोपो

0

मेरा समाधान (VB.Net, इस एप्लिकेशन के "स्टेजिंग" (UAT) संस्करण को "स्टेजिंग" प्रमाण पत्र के साथ काम करने की आवश्यकता है लेकिन लाइव साइट पर एक बार अनुरोधों को प्रभावित न करें):

    ...
        Dim url As String = ConfigurationManager.AppSettings("APIURL") & "token"
        If url.ToLower().Contains("staging") Then
           System.Net.ServicePointManager.ServerCertificateValidationCallback = AddressOf AcceptAllCertifications
        End If
    ...

    Private  Function AcceptAllCertifications(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
        Return True
    End Function

-3

यदि खराब सर्टिफिकेट काम नहीं करता है, जब ServerCertificateValidationCallback वापस लौटाता है; मेरा सर्वर सर्टिफिकेशन सत्यापन अमान्य कोड:

ServicePointManager.ServerCertificateValidationCallback += delegate
{
    LogWriter.LogInfo("Проверка сертификата отключена, на уровне ServerCertificateValidationCallback");
    return true;
};

मेरा कोड जो रोका गया है ServerCertificateValidationCallback निष्पादित:

     if (!(ServicePointManager.CertificatePolicy is CertificateValidation))
    {
        CertificateValidation certValidate = new CertificateValidation();
        certValidate.ValidatingError += new CertificateValidation.ValidateCertificateEventHandler(this.OnValidateCertificateError);
        ServicePointManager.CertificatePolicy = certValidate;
    }

OnValidateCertificateError फ़ंक्शन:

private void OnValidateCertificateError(object sender, CertificateValidationEventArgs e)
{
    string msg = string.Format(Strings.OnValidateCertificateError, e.Request.RequestUri, e.Certificate.GetName(), e.Problem, new Win32Exception(e.Problem).Message);
    LogWriter.LogError(msg);
    //Message.ShowError(msg);
}

मैंने प्रमाणपत्र प्रमाणपत्र अमान्य कोड और ServerCertificateValidationCallback को बहुत अच्छी तरह से चल रहा है


आपको कभी भी किसी प्रमाणपत्र सत्यापन को अक्षम नहीं करना चाहिए। इसके बजाय, विफलता के कारण समस्या को ठीक करें।
डैन

उत्पादन में इसका उपयोग करने का सुरक्षा जोखिम क्या है?
अमजद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.