.Net में वेब सेवाओं को कॉल करते समय अवैध SSL प्रमाणपत्र त्रुटियों को दरकिनार करें


88

हम एक नया SharePoint स्थापित कर रहे हैं जिसके लिए हमारे पास अभी तक एक मान्य एसएसएल प्रमाणपत्र नहीं है। मैं सेटअप के बारे में कुछ मेटा डेटा प्राप्त करने के लिए उस पर सूचियों की वेब सेवा को कॉल करना चाहूंगा। हालाँकि, जब मैं ऐसा करने की कोशिश करता हूं, तो मुझे इसका अपवाद मिलता है:

अंतर्निहित कनेक्शन बंद कर दिया गया था: एसएसएल / टीएलएस सुरक्षित चैनल के लिए विश्वास संबंध स्थापित नहीं कर सका।

नेस्टेड अपवाद में त्रुटि संदेश है:

सत्यापन प्रक्रिया के अनुसार दूरस्थ प्रमाणपत्र अमान्य है।

यह सही है क्योंकि हम एक अस्थायी प्रमाणपत्र का उपयोग कर रहे हैं।

मेरा प्रश्न है: मैं इन त्रुटियों को अनदेखा करने के लिए .Net वेब सेवा क्लाइंट ( SoapHttpClientProtocol ) को कैसे बता सकता हूं ?

जवाबों:


18

इस समस्या का सामना करने के दौरान मैंने जिस दृष्टिकोण का उपयोग किया था, वह था प्रश्न में कंप्यूटर पर विश्वसनीय अधिकारियों की सूची में अस्थायी प्रमाण पत्र के हस्ताक्षरकर्ता को जोड़ना।

मैं आम तौर पर CACERT के साथ बनाए गए प्रमाणपत्रों के साथ परीक्षण करता हूं, और उन्हें अपने विश्वसनीय अधिकारियों की सूची में जोड़कर तैराकी में काम किया।

इस तरह से करने का मतलब है कि आपको अपने आवेदन में कोई कस्टम कोड नहीं जोड़ना है और यह ठीक से अनुकरण करता है कि आपके आवेदन को तैनात करने पर क्या होगा। जैसे, मुझे लगता है कि चेक को प्रोग्रामेटिक रूप से बंद करने का यह एक बेहतर उपाय है।


यह मेरा पहला विचार था। दुर्भाग्य से प्रमाणपत्र की समय सीमा समाप्त हो गई है, इसलिए यह विश्वसनीय होना असंभव है।
२०.०४ बजे j.vdbergh

क्या कोई कारण है कि आप सीए सर्टिफिकेट जैसे किसी का उपयोग नहीं कर सकते हैं? यदि यह एक परीक्षण प्रमाण पत्र है तो आप बस उसी के साथ आगे बढ़ सकते हैं। मुझे यकीन नहीं है कि इन चेक को बंद करने का कोई तरीका है!
सिमोन जॉनसन

113

वैकल्पिक रूप से आप कॉल बैक प्रतिनिधि को पंजीकृत कर सकते हैं जो प्रमाणन त्रुटि को अनदेखा करता है:

...
ServicePointManager.ServerCertificateValidationCallback = MyCertHandler;
...

static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error)
{
// Ignore errors
return true;
}

1
मैंने इस स्थिर विधि को Global.asax में जोड़ा और "OnApplicationStart" पर ईवेंट सेट किया। एक जादू की तरह काम किया। धन्यवाद
जुआन ज़मोरा

1
@ जुआनज़ामोरा मैंने वही किया जो आपने किया था। इसने काम कर दिया!
सचिन बीआर

5
यह सब आपको करने की ज़रूरत है, अगर आप "मैन इन द मिडल" हमले के लिए अशिष्ट होना चाहते हैं ...
हौटमैन

2
आदर्श रूप से आपको केवल विकास के माहौल में ऐसा करना चाहिए।
रॉन डेफ्रिटास

79

जेसन एस के जवाब की तरह:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

मैंने इसे अपने मेन में रखा और मेरे लुक को देखा app.configऔर परीक्षण किया (ConfigurationManager.AppSettings["IgnoreSSLCertificates"] == "True")कि क्या कोड की उस लाइन को कॉल करने से पहले।


24

मैंने इसे इस तरह हल किया:

अपने ssl webservice को कॉल करने से पहले निम्नलिखित को कॉल करें जो उस त्रुटि का कारण बनता है:

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

/// <summary>
/// solution for exception
/// System.Net.WebException: 
/// The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
/// </summary>
public static void BypassCertificateError()
{
    ServicePointManager.ServerCertificateValidationCallback +=

        delegate(
            Object sender1,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors)
        {
            return true;
        };
}

12

मुझे DownloadString का उपयोग करने में समान त्रुटि हो रही थी; और इस पृष्ठ पर सुझावों के साथ नीचे काम करने में सक्षम था

System.Net.WebClient client = new System.Net.WebClient();            
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
string sHttpResonse = client.DownloadString(sUrl);

3
ServicePointManager.ServerCertificateValidationCallback +=
            (mender, certificate, chain, sslPolicyErrors) => true;

विल एसएलएल को बायपास करेगा। इसे अपने वेब सर्विस कंस्ट्रक्टर को लिखें।


1

Newbies के लिए, आप अपने आंशिक सेवा वर्ग को एक अलग सीएसएस फ़ाइल में विस्तारित कर सकते हैं और इसे एकीकृत करने के लिए "imanabidi" द्वारा प्रदान किए गए कोड को जोड़ सकते हैं।


1

साइमन जॉन्सन पोस्ट पर और विस्तार करने के लिए - आदर्श रूप से आप एक समाधान चाहते हैं जो उन परिस्थितियों का अनुकरण करेगा जो आप उत्पादन में देखेंगे और अपने कोड को संशोधित करेंगे ऐसा नहीं करेंगे और यदि आप इसे तैनात करने से पहले कोड को बाहर निकालना भूल जाते हैं तो यह खतरनाक हो सकता है।

आपको किसी प्रकार के स्व-हस्ताक्षरित प्रमाण पत्र की आवश्यकता होगी। यदि आप IIS एक्सप्रेस का उपयोग कर रहे हैं, तो आपके पास इनमें से एक पहले से ही होगा, आपको बस इसे ढूंढना होगा। फ़ायरफ़ॉक्स या जो भी ब्राउज़र आपको पसंद है उसे खोलें और अपनी देव वेबसाइट पर जाएं। आपको URL बार से प्रमाणपत्र की जानकारी देखने में सक्षम होना चाहिए और आपके ब्राउज़र के आधार पर आपको प्रमाणपत्र को फ़ाइल में निर्यात करने में सक्षम होना चाहिए।

अगला, MMC.exe खोलें, और प्रमाणपत्र स्नैप-इन जोड़ें। अपनी प्रमाणपत्र फ़ाइल को विश्वसनीय रूट प्रमाणपत्र प्राधिकारी स्टोर में आयात करें और बस आपको इसकी आवश्यकता होनी चाहिए। यह सुनिश्चित करना महत्वपूर्ण है कि यह उस स्टोर में जाता है, न कि किसी अन्य स्टोर जैसे 'पर्सनल' पर। यदि आप MMC या प्रमाणपत्रों से अपरिचित हैं, तो जानकारी के साथ कई वेबसाइटें हैं कि यह कैसे करना है।

अब, आपका कंप्यूटर संपूर्ण रूप से किसी भी प्रमाणपत्र पर भरोसा करेगा जो उसने स्वयं उत्पन्न किया है और आपको इसे विशेष रूप से संभालने के लिए कोड जोड़ने की आवश्यकता नहीं होगी। जब आप उत्पादन के लिए जाते हैं तो यह काम करना जारी रखेगा बशर्ते आपके पास वहां एक उचित वैध प्रमाणपत्र स्थापित हो। उत्पादन सर्वर पर ऐसा न करें - यह बुरा होगा और यह सर्वर पर मौजूद लोगों के अलावा किसी अन्य क्लाइंट के लिए काम नहीं करेगा।

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