TLS 1.2 का उपयोग करने के लिए .NET वेब सेवा को अपडेट करें


99

मुझे अपने .NET वेब सेवा से जोड़ने के लिए TLS 1.2 का उपयोग करने की आवश्यकता है जो TLS 1.2 को बाध्य करने जा रहा है। मुझे एक संसाधन मिला, जिसमें कहा गया था कि .NET 4.6 डिफ़ॉल्ट रूप से TLS 1.2 का उपयोग करता है ताकि सबसे आसान समाधान की तरह लगे। मैंने सर्वर पर .NET फ्रेमवर्क को अपडेट किया और पुनरारंभ किया। IIS में मैंने .NET 4.6 का उपयोग करके एक एप्लिकेशन पूल बनाने की कोशिश की, लेकिन 4.0 एकमात्र विकल्प था। तब मुझे कुछ ऐसा मिला जिसने कहा कि यह अभी भी 4.0 कहेगा क्योंकि 4.6 .NET 4.0 के लिए एक "जगह" अद्यतन है। इसलिए मुझे लगा कि शायद मैं हो गया हूं। हालाँकि एक त्रुटि पृष्ठ पर जो मुझे असंबंधित कारणों से मिला, उसने कहा कि Microsoft .NET Framework Version:4.0.30319ऐसा लगता है कि मैं सफलतापूर्वक उन्नत नहीं हुआ हूं। यह सुनिश्चित करने के लिए कि मेरा एप्लिकेशन पूल .NET 4.6, या अधिक सामान्यतः टीएलएस 1.2 को कैसे सक्षम किया जाए, का उपयोग करने के बारे में कोई संकेत?


4
मेरा मानना ​​है कि TLS12 को सर्वर पर सक्षम होना चाहिए। support.quovadisglobal.com/kb/a433/…
lcryder

4
क्यों घटता है?
nasch

जवाबों:


138

हमने वास्तव में टीएलएस 1.2 की अनुमति देने के लिए सिर्फ एक .NET वेब सेवा को 4.6 में अपग्रेड किया है।

आर्टेम जो कह रहा है वह हमारे द्वारा किया गया पहला कदम था। हमने वेब सेवा के ढांचे को 4.6 पर फिर से जोड़ दिया और हमने टीएलएस 1.2 को सक्षम करने के लिए रजिस्ट्री कुंजी को बदलने की कोशिश की, हालांकि यह काम नहीं किया: कनेक्शन अभी भी टीएलएस 1.0 में था। इसके अलावा, हम मशीन पर एसएलएल 3.0, टीएलएस 1.0 या टीएलएस 1.1 को अस्वीकार नहीं करना चाहते थे: अन्य वेब सेवाएं इसका उपयोग कर सकती हैं; हमने रजिस्ट्री पर अपने परिवर्तन वापस किए।

हमने वास्तव में IIS को बताने के लिए Web.Config फ़ाइलों को बदल दिया: "हे, मुझे 4.6 में चलाएं"।

यहाँ हम बदलावों को जोड़ रहे हैं। web .config + recompilation in .NET 4.6:

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->

    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />

    <authentication mode="Windows"/>
    <pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>

और कनेक्शन टीएलएस 1.2 में बदल गया, क्योंकि आईआईएस अब 4.6 (स्पष्ट रूप से) में वेब सेवा चला रहा है और 4.6 डिफ़ॉल्ट रूप से टीएलएस 1.2 का उपयोग कर रहा है।


3
यहां हम शोध के लिए उपयोग किए गए दस्तावेज़ हैं: HTTPRuntime , RenderingCompatibility
एटिएन

1
मैंने यह पता लगाया - मैं HTTPS का अनुरोध नहीं कर रहा था। मेरे तय करने के बाद, इसने काम किया।
nasch

3
4.6 में संकलन बदलना और httpRuntime 4.6 को जोड़ना हमारे मामले में पर्याप्त था, समाधान के लिए धन्यवाद!
krilovich

2
यह पूरी तरह से सही जवाब है। अभी हाल ही में इस के माध्यम से चला गया। यहाँ इसके बारे में एक ब्लॉग पोस्ट है: blog.thelevelup.com/pci-security-is-your-restaurant-ready और एक GitHub प्रोजेक्ट जो ऐसा करता है: github.com/TheLevelUp/pos-tls-patcher
user24601


88

अपने वेब सेवा क्लाइंट को तुरंत करने से पहले निम्न कोड जोड़ें:

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

या टीएलएस 1.1 और पूर्व के साथ पिछड़े संगतता के लिए:

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

2
हाँ, मैं पहले से ही ऐसा कर रहा हूं, लेकिन त्रुटि संदेश अभी भी .NET 4.0 इंगित करता है।
nasch

12
वह आपका सीएलआर संस्करण है। .Net CLR के दो संस्करण हैं, 2.0 और 4.0। IIS में आप CLR संस्करण निर्दिष्ट करते हैं, फ्रेमवर्क संस्करण नहीं। IIS आपको नहीं बताएगा। नेट 4.6 क्योंकि यह इस बारे में परवाह नहीं करता है। यदि आपने 4.6 का उपयोग करके संकलित किया है, तो आप 4.6 का उपयोग कर रहे हैं।
एमी

2
TLS 1.2 को .NET 4.5 के बाद से समर्थित है
गिल्बर्टो अलेक्जेंड्रे

5
इस मामले में; = = केवल से बेहतर है =। वे द्विआधारी झंडे हैं, अनावश्यक रूप से सब कुछ अधिलेखित न करें।
इज़ी

2
@ जॉनोवू - कृपया इज़ी की टिप्पणी ऊपर ध्यान दें। आपका कोड HTTPS संसाधनों से कनेक्ट करते समय स्पष्ट रूप से केवल TLS 1.2 का उपयोग करने के लिए .NET बताता है। यानी अगर एक सर्वर में केवल टीएलएस 1.1 था, तो आपका कोड इसे कनेक्ट करने से रोक देगा क्योंकि यह केवल टीएलएस 1.2 का उपयोग कर रहा है। आपको अपने कोड का उपयोग करने के लिए = = यह बताने के लिए कि "टीएलएस 1.2 को एक विकल्प के रूप में भी उपयोग करने का प्रयास करें" जब क्लाइंट और सर्वर बातचीत करते हैं कि किस प्रोटोकॉल का उपयोग करना है।
डॉन चेडल

27

यदि आप .Net का उपयोग पहले कर रहे हैं तो 4.5 से पहले आपके पास Enum में Tls12 नहीं है इसलिए यहाँ स्पष्ट रूप से उल्लेख किया गया है

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

17

तीन चरणों की जरूरत:

  1. स्पष्ट रूप से SSL2.0, TLS1.0, TLS1.1 को अपने सर्वर मशीन पर निषिद्ध के रूप में चिह्नित करें, जोड़कर Enabled=0और DisabledByDefault=1अपनी रजिस्ट्री में (पूर्ण पथ है HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols)। विवरण के लिए स्क्रीन देखें रजिस्ट्री

  2. TLS1.21 से चरणों का पालन करके स्पष्ट रूप से सक्षम करें। बस Enabled=1और DisabledByDefault=0क्रमशः उपयोग करें ।

नोट: सर्वर संस्करण सत्यापित करें: प्रोटोकॉल का Windows Server 2003समर्थन नहीं करता TLS 1.2है

  1. TLS1.2केवल एप्लिकेशन स्तर पर सक्षम करें , जैसे @ जॉन वू ने ऊपर सुझाव दिया है।

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

आशा है कि यह मार्गदर्शिका मदद करेगी।

UPDATE As @Subbu ने उल्लेख किया: आधिकारिक गाइड


1
आधिकारिक संदर्भ - Technet.microsoft.com/en-us/library/…
Subbu

हाय @Artem tls जोड़ने के बाद क्या मुझे सर्वर को पुनः आरंभ करने की आवश्यकता है?
सिम्बा

@ सिंबा आपने शायद इसे हल कर दिया है, लेकिन अभी ऐसा करने से मुझे सर्वर को पुनरारंभ करने की आवश्यकता नहीं है।
मैट एन

5

मेरे लिए नीचे काम किया:

चरण 1: एप्लिकेशन सर्वर पर https://www.microsoft.com/en-us/download/details.aspx?id=48137 से वेब इंस्टॉलर को डाउनलोड और इंस्टॉल किया । इंस्टॉलेशन पूरा होने के बाद एप्लिकेशन सर्वर को रिबूट किया गया।

चरण 2: web.config में परिवर्तन के नीचे जोड़ा गया

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->
    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />
</system.web>

चरण 3: चरण 1 और 2 को पूरा करने के बाद, इसने एक त्रुटि दी, " WebForms UnobtrusiveValidationMode के लिए 'jquery' के लिए ScriptResourceMapping की आवश्यकता है। कृपया jquery (केस-सेंसिटिव) नामक एक ScriptResourceMapping जोड़ें " और इस त्रुटि को हल करने के लिए, मैंने ऐपसेटिंग में कुंजी को नीचे जोड़ा। मेरी web.config फ़ाइल में

<appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

HttpRuntime लक्ष्य ढांचे को जोड़ना मेरे लिए काम करता है।
मार्क रेडमैन

0

PowerBI एंबेडेड की आवश्यकता है TLS 1.2।

Etienne Faucher द्वारा दिए गए उत्तर आपके समाधान हैं। उपरोक्त उत्तर के लिए त्वरित लिंक ... उपरोक्त उत्तर के लिए त्वरित लिंक ... ( https://stackoverflow.com/a/45442874 )

पावरबीआई को टीएलएस 1.2 जून 2020 की आवश्यकता है - यह आपका उत्तर है - डिफ़ॉल्ट टीएलएस 1.2 व्यवहार के लिए आप जिस रूपरेखा की तलाश कर रहे हैं उसे बाध्य करने के लिए 4.6 तक उठने के लिए अपने आईआईएस रनटाइम के लिए मजबूर करने पर विचार करें। उपर्युक्त उत्तर आपको एक विन्यास परिवर्तन केवल समाधान देता है।

लक्षण : Microsoft PowerBI एंबेडेड के लिए जबरन बंद किया गया टीसीपी / आईपी कनेक्शन जो आपके सिस्टम में अचानक दिखाई देता है।

ये PowerBI Calls एक हार्ड टीसीपी / IP क्लोज एरर के साथ काम करना बंद कर देते हैं जैसे फ़ायरवॉल कनेक्शन को ब्लॉक कर देगा। आमतौर पर ऑर्टिफिशियल स्टेप काम करते हैं - यह तब होता है जब आप विशिष्ट कार्यक्षेत्र के लिए सेवा को हिट करते हैं और आईडी की रिपोर्ट करते हैं कि यह विफल हो जाता है।

यह टीएलएस 1.2 के बारे में माइक्रोसॉफ्ट पावरबीआई का 2020 का नोट है

PowerBIClient

ऐसे तरीके जो इस समस्या को दिखाते हैं

GetReportsInGroupAsync GetReportsInGroupAsAdminAsync GetReportsAsync GetReportsAsAdminAsync Microsoft.PowerBI.Api HttpClientHandler Force TLS 1.1 TL1 1.2

लोगों को यह जानने में मदद करने के लिए त्रुटि की खोज करें: System.Net.Http.HttpRequestException: अनुरोध भेजते समय कोई त्रुटि आई। System.Net.WebException: अंतर्निहित कनेक्शन बंद कर दिया गया था: एक अनपेक्षित त्रुटि एक भेजने पर हुई। System.IO.IOException: ट्रांसपोर्ट कनेक्शन के डेटा को पढ़ने में असमर्थ: एक मौजूदा कनेक्शन को रिमोट होस्ट द्वारा जबरन बंद कर दिया गया था।

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