2017-02-23 5 views
7

इस बारे में SO पर कई पोस्ट हैं और मैंने उन्हें खराब कर दिया है, लेकिन अभी भी कोई समाधान नहीं है। मुझे उम्मीद है कि कोई मुझे सही दिशा में इंगित कर सकता है।सोपहट्प क्लाइंटप्रोटोकॉल और टीएलएस 1.2 - क्लाइंट और सर्वर संवाद नहीं कर सकते हैं, क्योंकि उनके पास एक सामान्य एल्गोरिदम नहीं है

हमारे पास रिमोट प्रदाता से कनेक्ट करने के लिए टीएलएस 1.2 का उपयोग करने की आवश्यकता है। इसलिए मैं विंडोज सर्वर 2016 स्थापित किया है और जरूरत के रूप में यह कॉन्फ़िगर किया है:

enter image description here enter image description here

मैं जानता हूँ कि दूरस्थ सर्वर TLS 1.2 चल रहा है और यह हाइलाइट किए गए सिफर का समर्थन करता है कि है।

हम प्रदाता द्वारा प्रदान किए गए डब्ल्यूएसडीएल द्वारा उत्पन्न सी # प्रॉक्सी क्लास का उपयोग करके रिमोट एंड पॉइंट से कनेक्ट होते हैं - इससे पहले कि वे अपना अंत टीएलएस (System.Web.Services.Protocols.SoapHttpClientProtocol) में परिवर्तित कर दें।

जब मैं प्रॉक्सी का उपयोग कर कनेक्ट करता हूं तो मुझे आंतरिक अपवाद के साथ अपवाद मिलता है "क्लाइंट और सर्वर संवाद नहीं कर सकते हैं, क्योंकि उनके पास एक सामान्य एल्गोरिदम नहीं है"।

मैं कहीं भी नहीं देख सकता कि ServicePointManager.SecurityProtocol इसलिए मुझे लगता है कि .NET TLS 1.2 उठा रहा है क्योंकि यह एकमात्र सक्षम प्रोटोकॉल है? कोई विचार नहीं कि यह सिफर कैसे कर रहा है।

क्या कोई मुझे बता सकता है कि मैं इसे ठीक करने का प्रयास कैसे कर रहा हूं? यदि संभव हो तो मैं डब्लूएसडीएल प्रॉक्सी कक्षा को पुन: उत्पन्न नहीं करना चाहता हूं। (एसएसएल 3.0 और TLS 1.0 केवल), इसलिए

+2

आप .NET ढांचे का किस संस्करण पर चल रहे हैं? आपका ऐप कैसे कॉन्फ़िगर किया गया है? आपका मतलब क्या है "मैं कहीं भी नहीं देख सकता कि ServicePointManager.SecurityProtocol"? यह टीएलएस 1.2 समर्थन के लिए सभी महत्वपूर्ण है: http: // stackoverflow।कॉम/प्रश्न/28286086/डिफ़ॉल्ट-सुरक्षाप्रॉटोकॉल-इन-नेट -4-5/28502562 # 28502562 –

उत्तर

9

अपने क्लाइंट अनुप्रयोग .NET Framework 4.5.2 या उससे पहले के खिलाफ संकलित किया गया है, तो डिफ़ॉल्ट ServicePointManager.SecurityProtocol द्वारा SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls को आरंभ नहीं हो जाता है कि यह एक दूरस्थ सर्वर से कनेक्ट करने के लिए सक्षम नहीं होगा जिसके लिए टीएलएस 1.2 की आवश्यकता है।

  • .NET फ्रेमवर्क 4.6 या बाद के खिलाफ अपने क्लाइंट अनुप्रयोग पुनः संकलित करें:

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

  • क्लाइंट मशीन पर, RegEdit.exe चलाएं, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 पर जाएं, एक DWORD (32-बिट) जोड़ें मूल्य SchUseStrongCrypto नाम दिया, और 1. के लिए सेट
  • जब आपके क्लाइंट अनुप्रयोग प्रारंभ हो जाता है, TLS 1.2 पर बारी (इस ध्वज का कारण बनता है ServicePointManager.SecurityProtocolTls | Tls11 | Tls12 के लिए शुरू किया जाना है।): ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

पुनर्जीवित करने के लिए कोई ज़रूरत नहीं है आपके प्रॉक्सी क्लास क्योंकि यह टीएलएस प्रोटोकॉल या साइफर पर बातचीत के लिए ज़िम्मेदार नहीं है।

+0

बिल्कुल सही @ माइकल। मैं पहले से ही 4.6.1 के खिलाफ संकलन करने के लिए बदल चुका था, लेकिन फिर भी मुझे एहसास हुआ कि मुझे httpRuntime targetFramework को 4.6.1 होना था क्योंकि कनेक्शन अंततः वेबएपी द्वारा किया जा रहा था, जिसका मेरा मानना ​​है कि रजिस्ट्री परिवर्तन को रोकता है? HttpRuntime परिवर्तन करने से कनेक्शन TLS 1.2 बनाया गया। – TheEdge

0

मुझे यह समस्या किसी वेबसाइट से TLS 1.0 को हटाने वाली वेबसाइट से निकाली गई थी जो वेब सेवा से कनेक्ट हो रहा था। मेरे लिए यह एक httpRuntime था जो वेब सेवा के web.config में 4.5.1 पर फंस गया था। सेवा को बदलकर 4.6.1 कर दिया गया था, httpRconfime के संस्करण को web.config में बदलकर 4.6.1 तक समस्या को हल किया गया था। वेबसाइट ने वेब सेवा के लिए टीएलएस स्थापित करने की कोशिश की और केवल 1.2 और 1.1 उपलब्ध हैं। वेब सेवा ने केवल 1.0 का समर्थन किया ताकि त्रुटि उत्पन्न हुई।

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