मैं आवेदन में कुछ स्व-हस्ताक्षरित प्रमाणपत्र पर विश्वास नहीं करने की जरूरत है, तो मैं इस तरह सत्यापन कॉलबैक ओवरराइड:सेवापॉइंट प्रबंधक को ओवरराइड करते समय डिफ़ॉल्ट प्रमाणपत्र जांच को कॉल करने के लिए कैसे करें। सर्वर पर सत्यापित करें प्रमाणीकरण वैधता Callback?
ServicePointManager.ServerCertificateValidationCallback = MyRemoteCertificateValidationCallback;
...
public static bool MyRemoteCertificateValidationCallback(
Object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
if (IsAprrovedByMyApplication(sender, certificate)) // <-- no matter what the check here is
return true;
else
return false; // <-- here I'd like to call the default Windwos handler rather than returning 'false'
}
लेकिन साइट मैं जोड़ने हूँ करने के लिए जब वहाँ कुछ नीति त्रुटियों कर रहे हैं, और द्वारा अनुमोदित नहीं है आवेदन, अपवाद फेंक दिया जाता है। यहां समस्या यह है कि यह मानक विंडोज व्यवहार से अलग है। https://www.dscoduc.com/
यह प्रमाण पत्र एक अज्ञात जारीकर्ता है, और इसलिए अविश्वसनीय:
इस साइट पर विचार करें। मैंने इसे स्थानीय कॉम्प्यूटर के विश्वसनीय लोगों (यह विंडोज 7) में एमएमसी के साथ जोड़ा है।
अगर मैं प्रमाणपत्र सत्यापन कॉलबैक अधिभावी के बिना इस कोड चलाएँ:
HttpWebRequest http = (HttpWebRequest)HttpWebRequest.Create("https://www.dscoduc.com/");
using (WebResponse resp = http.GetResponse())
{
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
string htmlpage = sr.ReadToEnd();
}
}
इसे सफलतापूर्वक जोड़ता है। इसका मतलब है कि विंडोज डिफ़ॉल्ट सत्यापनकर्ता ने इस प्रमाणपत्र पर भरोसा करने का फैसला किया है।
लेकिन एक बार मैं ServerCertificateValidationCallback ओवरराइड, मेरे कॉलबैक SslPolicyErrors.RemoteCertificateChainErrors और चेन के साथ कहा जाता है की स्थिति के साथ एक तत्व होता है X509ChainStatusFlags.PartialChain (वास्तव में मैं वर्तमान क्योंकि, यहां कोई त्रुटि प्राप्त करने के लिए उम्मीद करेंगे प्रमाण विश्वसनीय होना चाहिए)
यह साइट मेरी विश्वसनीय सूची में शामिल नहीं है, और मेरे कॉलबैक से 'सत्य' वापस नहीं करना चाहती। लेकिन मैं न तो 'झूठी' वापस नहीं करना चाहता, या मुझे अपवाद मिलेगा: "रिमोट प्रमाणपत्र प्रमाणीकरण प्रक्रिया के अनुसार अमान्य है", जिसे स्पष्ट रूप से https://www.dscoduc.com/ के लिए अपेक्षित नहीं है, क्योंकि यह विश्वसनीय लोगों की दुकान में जोड़ा गया है , और जब प्रमाणपत्र कॉलबैक ओवरराइड नहीं होता है तो विंडोज द्वारा अनुमोदित किया जाता है। तो मैं चाहता हूं कि विंडोज इस साइट के लिए डिफ़ॉल्ट सत्यापन प्रक्रिया ले। मैं खुद को विंडोज ट्रस्टेड स्टोर्स में देखना नहीं चाहता हूं और सभी चेन तत्वों के माध्यम से जाना चाहता हूं, क्योंकि यह विंडोज़ में पहले से ही (और उम्मीदपूर्वक सही ढंग से लागू) है।
दूसरे शब्दों में, मुझे उपयोगकर्ता द्वारा अनुमोदित साइटों (जिन्हें उनकी सेटिंग्स में कहीं भी संग्रहीत किया जाता है) पर स्पष्ट रूप से विश्वास करने की आवश्यकता है, और अन्य सभी के लिए डिफ़ॉल्ट प्रमाणन जांच को कॉल करें।
ServicePointManager.ServerCertificateValidationCallback के लिए डिफ़ॉल्ट मान शून्य है, इसलिए बाद में कॉल करने के लिए मेरे लिए कोई 'डिफ़ॉल्ट' कॉलबैक नहीं है। मुझे यह 'डिफ़ॉल्ट' प्रमाण पत्र हैंडलर कैसे कॉल करना चाहिए?
धन्यवाद