के लिए कस्टम सर्टिफिकेट नहीं जोड़ रहा है मेरे पास निम्नलिखित सी # कोड है, जो एक कस्टम प्रमाणपत्र के साथ एक https कॉल का निर्माण करता है। टीएलएस 1.1 का उपयोग करते समय, कॉल ठीक काम करता है। टीएलएस 1.2 का उपयोग करते समय कॉल ब्रेक। मैं कर्ल का उपयोग कर, टीएलएस 1.2 का उपयोग कर ठीक काम करता है।सी # और डॉटनेट 4.7.1 टीएलएस 1.2 कॉल
सी # कोड:
X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import("C:\\SomePath\\MyCertificate.pfx", "MyPassword", X509KeyStorageFlags.PersistKeySet);
var cert = collection[0];
ServicePointManager.SecurityProtocol = ...;
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;
HttpClientHandler handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true;
handler.ClientCertificates.Add(cert);
var content = new ByteArrayContent(Encoding.GetEncoding("latin1").GetBytes("Hello world"));
HttpClient client = new HttpClient(handler);
var resp = client.PostAsync(requestUri: url, content: content).Result.Content.ReadAsStringAsync().Result;
वर्क्स के साथ:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;
त्रुटि के साथ:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
नेट त्रुटि संदेश: SocketException: एक मौजूदा कनेक्शन जबरन द्वारा बंद कर दिया गया था रिमोट होस्ट
नेट संस्करण: 4.7.1
ओएस: विंडोज 10 संस्करण 1703 (समर्थित सिफर सूची: https://msdn.microsoft.com/en-us/library/windows/desktop/mt808163(v=vs.85).aspx) - और सर्वर को निर्दिष्ट TLS_RSA_WITH_AES_256_GCM_SHA384 प्रयोग की जाने वाली है, जो समर्थित सिफर में से है।
वायरसहार्क में मैं देख सकता हूं कि कामकाजी कॉल (सी #/टीएलएस 1.1 और कर्ल टीएलएस 1.2) के साथ प्रमाणपत्र सर्वर पर भेजा जा रहा है। यहाँ सी # TLS 1.1 कॉल के लिए wireshark डंप है:
हालांकि, यह भी wireshark में, मुझे लगता है कि देख सकते हैं के साथ सी #/TLS 1.2 वहाँ कोई प्रमाण पत्र ग्राहक से सर्वर के लिए भेजा जा रहा है।
किसी को भी देख सकते हैं मैं यहाँ क्या याद आ रही है: यहाँ सी # TLS 1.2 कॉल के लिए wireshark डंप है?
अद्यतन
ऐसा लगता है प्रमाण पत्र एक md5 हस्ताक्षर जो TLS 1.2 के साथ संयोजन में खिड़कियों में Schannel द्वारा समर्थित नहीं है है। हमारे विक्रेता ने समाधान के रूप में हमें एक और प्रमाण पत्र बनाया है। https://community.qualys.com/thread/15498
मुझे नेट कोर 2.0 क्लाइंट/सर्वर एप्लिकेशन के साथ समान समस्या थी। मैंने सर्वर पर टीएलएस 1.2 को मजबूर कर हल किया। इस तरह, ग्राहक प्रोटोकॉल और प्रमाणपत्र सही तरीके से बातचीत करते हैं। आप किसी ऐसे सर्वर से कनेक्ट करने का प्रयास कर सकते हैं जो केवल टीएलएस 1.2 के लिए मजबूर हो और देखें कि आपके पास .NET Framework के साथ समान व्यवहार है या नहीं। – Ghigo
सर्वर पर इसे अच्छी तरह से बदलना वास्तव में एक विकल्प नहीं है क्योंकि सर्वर एक विक्रेता से संबंधित है। और इससे कोई फर्क नहीं पड़ता कि मैं टीएलएस 1.1 जोड़ता हूं। जब तक टीएलएस 1.2 स्वीकार्य प्रोटोकॉल में से एक है, तो यह समस्या होती है। मुझे यह जानने की ज़रूरत है कि क्यों .net इस तरह से व्यवहार करता है जब कर्ल ठीक काम करता है। और मुझे टीएलएस 1.2 सक्षम होना चाहिए क्योंकि यह एक स्थिर सेटिंग है और अन्य कनेक्शन उसी एप्लिकेशन में टीएलएस 1.2 पर निर्भर करते हैं। अगर मैं इस एकल कॉल के लिए टीएलएस 1.3 चालू कर सकता हूं, तो यह होगा। लेकिन हैंडलर ऑब्जेक्ट पर प्रोटोकॉल सेट करना एक अपवाद फेंकता है कि यह वर्तमान env में संभव नहीं है। –
इस प्रश्न के डुप्लिकेट की तरह बहुत कुछ दिखता है https://stackoverflow.com/questions/44751179/tls-1-2-not-negotiated-in-net-4-7-without-explicit-servicepointmanager-security –