SSL / TLS के कौन से संस्करण System.Net.WebRequest को सपोर्ट करते हैं?


81

अब SSL 3 को POODLE हमले के लिए कमजोर पाया गया है :

SSL / TLS के कौन से संस्करण System.Net.WebRequest का उपयोग किसी भी https Uri से कनेक्ट करते समय करते हैं?

मैं कई 3rd पार्टी एपीआई से कनेक्ट करने के लिए WebRequest का उपयोग करता हूं। इनमें से एक ने अब कहा है कि वे SSL 3. का उपयोग करने वाले किसी भी अनुरोध को रोक देंगे। लेकिन WebRequest .Net कोर फ्रेमवर्क (4.5 का उपयोग करके) का हिस्सा है, इसलिए यह स्पष्ट नहीं है कि यह किस संस्करण का उपयोग करता है।


यदि सर्वर (या बीच में आदमी) ने अनुरोध किया है तो क्या वेबसर्स्ट एसएसएल 3 में गिरावट आएगी?
22

यदि मैं गलत नहीं हूँ, तो मुझे लगता है कि WebRequest उस सर्वर पर सुरक्षा प्रमाणपत्र को देखता है जिसे आप खींचने की कोशिश कर रहे हैं और वेब सर्वर पर जो भी एन्क्रिप्शन स्कीमा है उसका उपयोग करता है। मुझे नहीं लगता कि आपको क्लाइंट की तरफ कुछ भी बदलने की जरूरत है।
आइसमैन

1
मुझे उम्मीद है कि एपीआई के मालिकों ने कहा है कि वे एसएसएल 3 का समर्थन नहीं करेंगे, उन्होंने यह सुनिश्चित करने के लिए सोचा कि उनका सर्वर अनुरोध नहीं करता है कि क्लाइंट एसएसएल 3 का उपयोग करें :)
जेके।

@ किसी भी तरह से यह बताने के लिए कि क्या वह एसएसएल 3 का समर्थन करता है या नहीं? मुझे संस्करणों से संबंधित कोई गुण दिखाई नहीं देता है।
जे.के.

@ जे.के. - मुझे अन्य ब्राउज़रों के बारे में निश्चित नहीं है, लेकिन मैं क्रोम का उपयोग कर रहा हूं। Chrome में, यदि आप किसी HTTPS वेबसाइट पर जाते हैं (उदाहरण के लिए Wellsfargo.com), तो आपको URL के पास एक हरा लॉक दिखाई देगा। उस लॉक पर क्लिक करें, फिर कनेक्शन टैब पर क्लिक करें, और यह आपको दिखाएगा। Wellsfargo.com के मामले में, क्रोम का कहना है कि "कनेक्शन TLS 1.0 का उपयोग करता है"। IE और अन्य ब्राउज़रों को समान चीज़ दिखानी चाहिए।
आइसमैन

जवाबों:


51

System.Net.WebRequest का उपयोग करते समय आपका एप्लिकेशन उच्चतम TLS संस्करण का निर्धारण करने के लिए सर्वर से बातचीत करेगा, जो आपके एप्लिकेशन और सर्वर दोनों का समर्थन करता है, और इस का उपयोग करें। आप इस बारे में अधिक जानकारी देख सकते हैं कि यह यहाँ कैसे काम करता है:

http://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_handshake

यदि सर्वर टीएलएस का समर्थन नहीं करता है तो यह एसएसएल में वापस आ जाएगा, इसलिए यह संभावित रूप से एसएसएल 3 में वापस आ सकता है। आप उन सभी संस्करणों को देख सकते हैं जो .NET 4.5 यहां समर्थन करते हैं:

http://msdn.microsoft.com/en-us/library/system.security.authentication.sslprotocols(v=vs.110).aspx

अपने एप्लिकेशन को POODLE के प्रति संवेदनशील होने से बचाने के लिए, आप SSL3 को उस मशीन पर अक्षम कर सकते हैं, जिस पर आपका एप्लिकेशन इस कार्य को चला रहा है:

/server/637207/on-iis-how-do-i-patch-the-ssl-3-0-poodle-vulnerability-cve-2014-3566


20
मेरा सुझाव है कि WebRequest और HttpWebRequest जैसे आउटबाउंड अनुरोधों को सुरक्षित बनाने के लिए, आपको मेरे प्रश्न में विस्तृत रूप से SSL fallback को अक्षम करने के लिए चरणों का पालन करना चाहिए जैसे कि stackoverflow.com/questions/26389899/… पर । मूल रूप से आप पहले कोड की इस लाइन को चलाते हैं: System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTwap.ls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; जैसा कि मैं इसे समझता हूं, इस उत्तर में विस्तृत रजिस्ट्री फिक्स केवल इनबाउंड कनेक्शन पर लागू होती है।
जॉर्डन रेजर

1
ध्यान दें कि आपके पास SecurityProtocolType.Tls.net फ्रेमवर्क 3.5 या उससे कम में (और इसलिए टीएलएस 1.0) का विकल्प है
जेम्स वेस्टगेट

क्या मुझे System.Net.WebRequest ditching और RestSharp जैसी किसी अन्य लाइब्रेरी का उपयोग करके अधिक TLS समर्थन मिल सकता है या क्या यह वास्तविक .net फ्रेमवर्क है जिसे अपग्रेड करने की आवश्यकता है?
मफिन मैन

मेरा मानना ​​है कि यह वास्तविक .net ढांचा है जिसे उन्नत करने की आवश्यकता है। www.passionatecoder.ca
एहसान

1
@JamesWestgate मैं इस धारणा के तहत TLSथा कि वास्तव में ओएस / मशीन के स्तर पर लागू किया जाएगा? क्या ऐसा नहीं है कि वास्तविक HTTP ट्रैफ़िक कहाँ हो रहा है? इसलिए मुझे नहीं लगता कि यह एक विशेष टीएलएस का उपयोग करने के लिए अपने कोड को बताने की कोशिश करना समझ में आता है जो वास्तव में ओएस द्वारा निर्धारित किया गया है।
डॉन चेडल

52

यह एक महत्वपूर्ण सवाल है। 2014 के प्रकाशित Poodle के हमले से SSL 3 प्रोटोकॉल (1996) अपूरणीय रूप से टूट गया है। IETF ने "SSLv3 MUST NOT इस्तेमाल किया" प्रकाशित किया है । वेब ब्राउजर इसे डिच कर रहे हैं। मोज़िला फ़ायरफ़ॉक्स और गूगल क्रोम पहले ही ऐसा कर चुके हैं।

ब्राउज़रों में प्रोटोकॉल समर्थन की जाँच के लिए दो उत्कृष्ट उपकरण एसएसएल लैब के ग्राहक परीक्षण और https://www.howsmyssl.com/ हैं । उत्तरार्द्ध को जावास्क्रिप्ट की आवश्यकता नहीं है, इसलिए आप इसे .NET के HttpClient से आज़मा सकते हैं :

// set proxy if you need to
// WebRequest.DefaultWebProxy = new WebProxy("http://localhost:3128");

File.WriteAllText("howsmyssl-httpclient.html", new HttpClient().GetStringAsync("https://www.howsmyssl.com").Result);

// alternative using WebClient for older framework versions
// new WebClient().DownloadFile("https://www.howsmyssl.com/", "howsmyssl-webclient.html");

परिणाम हानिकारक है:

आपका क्लाइंट टीएलएस 1.0 का उपयोग कर रहा है, जो कि बहुत पुराना है, संभवतः BEAST हमले के लिए अतिसंवेदनशील है, और उस पर सबसे अच्छा सिफर सूट उपलब्ध नहीं है। MD5-SHA-1 को बदलने के लिए AES-GCM, और SHA256 जैसे परिवर्धन TLS 1.0 क्लाइंट के साथ-साथ कई और आधुनिक सिफर सुइट्स के लिए उपलब्ध नहीं हैं।

जिसके विषय में है। यह 2006 के इंटरनेट एक्सप्लोरर 7 के बराबर है।

एक HTTP क्लाइंट का समर्थन करने वाले प्रोटोकॉल को वास्तव में सूचीबद्ध करने के लिए, आप नीचे दिए गए संस्करण-विशिष्ट परीक्षण सर्वर आज़मा सकते हैं:

var test_servers = new Dictionary<string, string>();
test_servers["SSL 2"] = "https://www.ssllabs.com:10200";
test_servers["SSL 3"] = "https://www.ssllabs.com:10300";
test_servers["TLS 1.0"] = "https://www.ssllabs.com:10301";
test_servers["TLS 1.1"] = "https://www.ssllabs.com:10302";
test_servers["TLS 1.2"] = "https://www.ssllabs.com:10303";

var supported = new Func<string, bool>(url =>
{
    try { return new HttpClient().GetAsync(url).Result.IsSuccessStatusCode; }
    catch { return false; }
});

var supported_protocols = test_servers.Where(server => supported(server.Value));
Console.WriteLine(string.Join(", ", supported_protocols.Select(x => x.Key)));

मैं .NET फ्रेमवर्क का उपयोग कर रहा हूँ 4.6.2। मैंने पाया कि HttpClient केवल SSL 3 और TLS 1.0 का समर्थन करता है। यह विषय है। यह 2006 के इंटरनेट एक्सप्लोरर 7 के बराबर है।


अद्यतन: यह मुड़ता है HttpClient टीएलएस 1.1 और 1.2 का समर्थन करता है, लेकिन आपको उन्हें मैन्युअल रूप से चालू करना होगा System.Net.ServicePointManager.SecurityProtocolHttps://stackoverflow.com/a/26392698/284795 देखें

मुझे नहीं पता कि यह खराब प्रोटोकॉल का उपयोग क्यों करता है। ऐसा लगता है कि एक खराब सेटअप पसंद है, एक प्रमुख सुरक्षा बग के लिए टेंटमाउंट (मैं शर्त लगाता हूं कि बहुत सारे एप्लिकेशन डिफ़ॉल्ट नहीं बदलते हैं)। हम इसे कैसे रिपोर्ट कर सकते हैं?


मुझे किस प्रोटोकॉल का उपयोग करना चाहिए ?
किकेनेट

8

मैंने वहां एक उत्तर भी दिया, लेकिन @Colonel पैनिक का लेख टीएलएस 1.2 को मजबूर करने के सुझाव को संदर्भित करता है। भविष्य में, जब टीएलएस 1.2 के साथ छेड़छाड़ की जाती है या सिर्फ सुपरसीड किया जाता है, तो आपका कोड टीएलएस 1.2 से अटका रहना एक कमी माना जाएगा। TLS1.2 के लिए बातचीत डिफ़ॉल्ट रूप से .Net 4.6 में सक्षम है। यदि आपके पास अपने स्रोत को .net 4.6 में अपग्रेड करने का विकल्प है, तो मैं अत्यधिक टीएलएस 1.2 को मजबूर करने के लिए उस बदलाव की सिफारिश करूंगा।

यदि आप टीएलएस 1.2 को बल देते हैं, तो दृढ़ता से कुछ प्रकार के ब्रेडक्रंब को छोड़ने पर विचार करें जो कि 4.6 या उच्चतर ढांचे में अपग्रेड करने पर उस बल को हटा देगा।


2
"TLS1.2 के लिए बातचीत में .Net 4.6 डिफ़ॉल्ट रूप से सक्षम है" क्या आपके पास इसके लिए दस्तावेज हैं?
felickz

2
उस समय, हमें ऐसे अनिश्चित दस्तावेज़ मिले जो इस विशेषता को इंगित करते थे ( उदाहरणों के ठीक ऊपर msdn.microsoft.com/en-us/library/… देखें )। हालांकि, हमने एक सर्वर के साथ एक परीक्षण कार्यक्रम बनाकर इसे सत्यापित किया, जो TLS 1.2 पर बंद था और एक पेज को डाउनलोड करने और डाउनलोड करने के लिए वेबरेक्स्ट का उपयोग किया। फिर हमने प्रोग्राम पर फ्रेमवर्क संस्करण बदल दिए। सभी डाउनलवेल संस्करण कनेक्ट करने में विफल रहे, लेकिन .net 4.6 बिना किसी समस्या के जुड़ा हुआ है।
प्रोफेसर वॉन लेमोन्गर्ल

विवरण के लिए धन्यवाद, मैं इतने सारे एपीआई प्रदाताओं को इंगित करता हूं कि 4.5 टीएलएस 1.2 से कनेक्ट नहीं होता है, लेकिन मैंने किसी भी आधिकारिक दस्तावेज प्रदान करने के लिए संघर्ष किया और समुदाय पर भरोसा करना पड़ा :)
felickz

यह सही है और जाने का रास्ता है। हमें वेब एंडपॉइंट्स पर बात करने वाले कई पुराने सर्वर मिले हैं जो अब टीएलएस पर जोर दे रहे हैं। एसएसएल / टीएलएस त्रुटियों के साथ वेब सेवा संदर्भ विफल होने लगे। आप रजिस्ट्री को हैक कर सकते हैं लेकिन सर्वर को नवीनतम .NET संस्करण में अपग्रेड करना आसान और सुरक्षित है।
नील लासलेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.