2009-02-18 10 views
89

मैं एक प्रोग्राम लिख रहा हूं जो यूआरएल प्रदान किए गए यूआरएल से सामग्री पढ़ता है। मेरी समस्या कोड है कि कुछ इस तरह चला जाता है में है:मैं https का उपयोग कर SSL एन्क्रिप्टेड साइट तक पहुंचने के लिए WebRequest का उपयोग कैसे करूं?

Uri uri = new Uri(url); 
WebRequest webRequest = WebRequest.Create(uri); 
WebResponse webResponse = webRequest.GetResponse(); 
ReadFrom(webResponse.GetResponseStream()); 

और अगर प्रदान की यूआरएल एक "https: //" है यह टूट रहा है यूआरएल। क्या कोई मुझे इस कोड को बदलने में मदद कर सकता है ताकि वह एसएसएल एन्क्रिप्टेड सामग्री के साथ काम करेगा। धन्यवाद।

उत्तर

150

आप इसे सही तरीके से कर रहे हैं लेकिन उपयोगकर्ता उन साइटों पर यूआरएल प्रदान कर रहे हैं जिनके पास अवैध एसएसएल कर्ट स्थापित हैं। आप उन प्रमाणपत्र समस्याओं की उपेक्षा कर सकते है अगर आप में इससे पहले कि आप वास्तविक वेब अनुरोध कर इस लाइन डाल:

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); 

जहां AcceptAllCertifications रूप

public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) 
{ 
    return true; 
} 
+1

यह मेरी समस्या बिल्कुल ठीक थी। मैं इसे सही ढंग से कर रहा था सिवाय इसके कि जब मैं अपने कोड का परीक्षण कर रहा था, तो मैं https: // localhost प्रदान कर रहा था जिसके परिणामस्वरूप त्रुटि आई क्योंकि प्रमाणपत्र www.mycompany.com के लिए था। मुझे सही दिशा में इंगित करने के लिए धन्यवाद। –

+36

इस उत्तर के लिए धन्यवाद! कुछ बेकार कोड से बचने के लिए मैंने इसे इस तरह इस्तेमाल किया: ServicePointManager.ServerCertificateValidationCallback = (एस, प्रमाण, श्रृंखला, एसएसएल) => सत्य; –

+2

धन्यवाद, आपने मुझे महोदय की मदद की। एफ # यह इतना आसान बनाता है: '' ServicePointManager.ServerCertificateValidationCallback <- Security.RemoteCertificateValidationCallback (मजेदार _ _ _ _ -> सत्य) '' –

15

यह लिंक आपको अपनी रुचि के हो जाएगा: http://msdn.microsoft.com/en-us/library/ds8bxk2a.aspx

http कनेक्शन के लिए, WebRequest और WebResponse कक्षाएं SSL का उपयोग वेब होस्ट कि SSL का समर्थन के साथ संवाद करने। एसएसएल का उपयोग करने का निर्णय वेबआरक्वेट क्लास द्वारा किया जाता है, जो यूआरआई के आधार पर दिया जाता है। यदि यूआरआई "https:" से शुरू होता है, तो एसएसएल का उपयोग किया जाता है; यदि यूआरआई "http:" से शुरू होता है, तो एक अनएन्क्रिप्टेड कनेक्शन का उपयोग किया जाता है।

+0

ग्रेट लिंक। यह एक महत्वपूर्ण भेद है। – DanM7

+0

आपका उत्तर इंगित करता है कि प्रश्न में कोड काम करना चाहिए? –

6

यह एक परिभाषित किया गया है मेरे लिए काम किया:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
+1

डिफ़ॉल्ट मान" एसएसएल 2 | टीएलएस "है। मैंने केवल अपने सर्वर पर टीएलएस 1.1 और 1.2 सक्षम किया था। यह वास्तव में समस्या तय! लिनक्स पर nginX के साथ LetsEncrypt के लिए, प्रोटोकॉल को यहां परिभाषित किया गया है: /etc/letsencrypt/options-ssl-nginx.conf – Jerther

+0

मुझे विश्वास है कि यह एक अलग समस्या से निपट रहा है। यह अमान्य कर्ट के बारे में नहीं है लेकिन एक उच्च टीएलएस संस्करण है। – wp78de

संबंधित मुद्दे