.NET 4.5 में डिफ़ॉल्ट सुरक्षाप्रोटोकॉल


Answers

टिप्पणियों को छोड़ने वालों में से कुछ ने ध्यान दिया है कि System.Net.ServicePointManager.SecurityProtocol को विशिष्ट मानों के लिए सेट करना मतलब है कि आपका ऐप भावी टीएलएस संस्करणों का लाभ नहीं ले पाएगा जो कि .NET को भविष्य के अपडेट में डिफ़ॉल्ट मान बन सकता है। प्रोटोकॉल की एक निश्चित सूची निर्दिष्ट करने के बजाय, आप प्रोटोकॉल को चालू या बंद कर सकते हैं जिन्हें आप जानते हैं और उनकी परवाह करते हैं, किसी भी अन्य को छोड़कर।

अन्य प्रोटोकॉल को प्रभावित किए बिना टीएलएस 1.1 और 1.2 चालू करने के लिए:

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

दूसरों को बंद किए बिना इन झंडे को चालू करने के लिए |= के उपयोग पर ध्यान दें।

अन्य प्रोटोकॉल को प्रभावित किए बिना SSL3 को बंद करने के लिए:

System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;
Question

TLS 1.2 तक समर्थन करने वाले सर्वरों के साथ संचार करने के लिए डिफ़ॉल्ट सुरक्षा प्रोटोकॉल क्या है? डिफ़ॉल्ट रूप से .NET होगा, सर्वर पक्ष पर समर्थित उच्चतम सुरक्षा प्रोटोकॉल चुनें या मुझे कोड की इस पंक्ति को स्पष्ट रूप से जोड़ना होगा:

System.Net.ServicePointManager.SecurityProtocol = 
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

कोड परिवर्तन के अलावा, इस डिफ़ॉल्ट को बदलने का कोई तरीका है?

अंत में, क्या .NET 4.0 केवल TLS 1.0 तक समर्थन करता है? यानी मुझे TLS 1.2 का समर्थन करने के लिए ग्राहक परियोजनाओं को 4.5 में अपग्रेड करना होगा।

मेरी प्रेरणा क्लाइंट साइड पर SSLv3 लिए समर्थन को हटाना है, भले ही सर्वर इसका समर्थन करता है (मेरे पास मशीन रजिस्ट्री में इसे अक्षम करने के लिए पहले से ही एक पावरहेल स्क्रिप्ट है) और सर्वर का समर्थन करने वाले उच्चतम टीएलएस प्रोटोकॉल का समर्थन करने के लिए।

अद्यतन: .NET 4.0 में ServicePointManager क्लास को देखते हुए मुझे TLS 1.0 और 1.1 लिए कोई अनुमानित मान नहीं दिखता है। .NET 4.0/4.5 दोनों में, डिफ़ॉल्ट SecurityProtocolType.Tls|SecurityProtocolType.Ssl3 । उम्मीद है कि रजिस्ट्री में SSLv3 को अक्षम करके यह डिफ़ॉल्ट नहीं टूट जाएगा।

हालांकि, मैंने फैसला किया है कि मुझे सभी ऐप्स को .NET 4.5 अपग्रेड करना होगा और स्पष्ट रूप से SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; जोड़ना होगा SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; वैसे भी सभी अनुप्रयोगों के सभी बूटस्ट्रैप कोड के लिए।

इससे एसएसएलवी 3 में डाउनग्रेड न करने के लिए विभिन्न एपिस और सेवाओं के आउटबाउंड अनुरोध किए जाएंगे और उच्चतम स्तर के TLS का चयन करना चाहिए।

क्या यह दृष्टिकोण उचित या ओवरकिल लगता है? मेरे पास अपडेट करने के लिए कई एप्लिकेशन हैं, और मैं उन्हें भविष्य के सबूत देना चाहता हूं क्योंकि मुझे लगता है कि कुछ प्रदाताओं द्वारा निकट भविष्य में TLS 1.0 को भी TLS 1.0 जा सकता है।

क्लाइंट एपीआई के आउटबाउंड अनुरोध करने के रूप में, रजिस्ट्री में SSL3 को अक्षम करने से भी .NET ढांचे में कोई प्रभाव पड़ता है? मैं डिफ़ॉल्ट रूप से देखता हूं, टीएलएस 1.1 और 1.2 सक्षम नहीं हैं, क्या हमें इसे रजिस्ट्री के माध्यम से सक्षम करना है? आरई http://support.microsoft.com/kb/245030

कुछ जांच के बाद, मेरा मानना ​​है कि रजिस्ट्री सेटिंग्स का कोई प्रभाव नहीं होगा क्योंकि वे आईआईएस (सर्वर उपकुंजी) और ब्राउज़र (क्लाइंट उपकुंजी) पर लागू होते हैं।

क्षमा करें यह पोस्ट कई प्रश्नों में बदल गया, "शायद" उत्तरों के साथ पीछा किया।




कुंजी के लिए: HKEY_LOCAL_MACHINE \ सॉफ़्टवेयर \ Microsoft.NETFramework \ v4.0.30319 मान: SchUseStrongCrypto

आपको मान 1 पर सेट करना होगा।




एक .reg एक्सटेंशन और निम्न सामग्री के साथ एक टेक्स्ट फ़ाइल बनाएँ:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

या इसे निम्न स्रोत से डाउनलोड करें:

https://tls1test.salesforce.com/s/NET40-Enable-TLS-1_2.reg

स्थापित करने के लिए डबल-क्लिक करें ...




निम्नलिखित कोड होगा:

  • प्रिंट सक्षम प्रोटोकॉल
  • उपलब्ध प्रोटोकॉल मुद्रित करें
  • यदि प्लेटफ़ॉर्म इसका समर्थन करता है और यदि यह प्रारंभ करने में सक्षम नहीं है तो TLS1.2 सक्षम करें
  • अगर यह सक्षम है तो SSL3 अक्षम करें
  • प्रिंट अंत परिणाम

अन्य प्रोटोकॉल प्रभावित नहीं होंगे। यह भविष्य के प्रोटोकॉल (टीएलएस 1.3, आदि) के साथ संगत बनाता है।

कोड

        Console.WriteLine("Runtime: " + System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(int).Assembly.Location).ProductVersion);
        Console.WriteLine("Enabled protocols:   " + ServicePointManager.SecurityProtocol);

        Console.WriteLine("Available protocols: ");
        Boolean platformSupportsTls12 = false;
        foreach (SecurityProtocolType protocol in Enum.GetValues(typeof(SecurityProtocolType))) {                
            Console.WriteLine(protocol.GetHashCode());
            if (protocol.GetHashCode() == 3072){
                platformSupportsTls12 = true;
            }
        }

        Console.WriteLine("Is Tls12 enabled: " + ServicePointManager.SecurityProtocol.HasFlag((SecurityProtocolType)3072));

        // enable Tls12, if possible
        if (!ServicePointManager.SecurityProtocol.HasFlag((SecurityProtocolType)3072){
            if (platformSupportsTls12){
                Console.WriteLine("Platform supports Tls12, but it is not enabled. Enabling it now.");
                ServicePointManager.SecurityProtocol |= (SecurityProtocolType)3072;
            } else {
                Console.WriteLine("Platform does not supports Tls12.");
            }
        }

        // disable SSL3. Has no negative impact if SSL3 is already disabled
        System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;

        Console.WriteLine("Enabled protocols:   " + ServicePointManager.SecurityProtocol);

उत्पादन

48 - एसएसएल 3, 1 9 2 - टीएलएस 1, 768 - टीएलएस 1.1, 3072 - टीएलएस 1.2

Runtime: 4.7.2114.0
Enabled protocols:   Ssl3, Tls
Available protocols: 
0
48
192
768
3072
Is Tls12 enabled: False
Platform supports Tls12, but it is not enabled. Enabling it now.
Ssl3 is enabled. Disabling it now.
Enabled protocols:   Tls, Tls12



उपरोक्त वर्णित हार्ड-कोडिंग ServicePointManager.SecurityProtocol या स्पष्ट SchUseStrongCrypto कुंजी का विकल्प:
आप SystemDefaultTlsVersions कुंजी के साथ डिफ़ॉल्ट SCHANNEL सेटिंग्स का उपयोग करने के लिए .NET को बता सकते हैं,
उदाहरण के लिए:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001



मुझे समस्या मिली जब मेरे ग्राहक ने टीएलएस को 1.0 से 1.2 तक अपग्रेड किया। मेरा एप्लिकेशन .NET Framework 3.5 का उपयोग कर रहा है और सर्वर पर चलाया जा रहा है। तो मैंने इसे इस तरह से तय किया:

  1. कार्यक्रम को ठीक करें

कॉल करने से पहले HttpWebRequest.GetResponse () इस कमांड को जोड़ें:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolTypeExtensions.Tls11 | SecurityProtocolTypeExtensions.Tls12;

एक्सटेंशन 2 डीएलएल 2 नए वर्ग जोड़कर: System.Net और System.Security. प्रमाणीकरण

    namespace System.Net
    {
        using System.Security.Authentication;
        public static class SecurityProtocolTypeExtensions
        {
            public const SecurityProtocolType Tls12 = (SecurityProtocolType)SslProtocolsExtensions.Tls12;
            public const SecurityProtocolType Tls11 = (SecurityProtocolType)SslProtocolsExtensions.Tls11;
            public const SecurityProtocolType SystemDefault = (SecurityProtocolType)0;
        }
    } 

    namespace System.Security.Authentication
    {
        public static class SslProtocolsExtensions
        {
            public const SslProtocols Tls12 = (SslProtocols)0x00000C00;
            public const SslProtocols Tls11 = (SslProtocols)0x00000300;
        }
    } 
  1. माइक्रोसॉफ्ट बैच अपडेट करें

बैच डाउनलोड करें:

  • विंडोज 2008 आर 2 के लिए: windows6.1-kb3154518-x64.msu
  • विंडोज 2012 आर 2 के लिए: windows8.1-kb3154520-x64.msu

डाउनलोड बैच और अधिक जानकारी के लिए आप यहां देख सकते हैं:

https://support.microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions-included-in-the-.net-framework-3.5.1-on-windows-7-sp1-and-server-2008-r2-sp1




Links