2015-05-27 15 views
15

के लिए उपयोग करने के लिए SSL प्रोटोकॉल निर्दिष्ट करने के लिए कैसे करें मेरे पास एक ऐसा एप्लिकेशन है जो HTTPS POST का उपयोग कर सर्वर पर डेटा भेजता है। मैं ऐसा करने के लिए System.Net.WebClient ऑब्जेक्ट का उपयोग करता हूं।वेब क्लाइंट क्लास

private byte[] PostNameValuePairs(string uri, NameValueCollection pairs) 
    { 
     byte[] response; 
     String responsestring = ""; 
     using (WebClient client = new WebClient()) 
     { 
      client.Headers = GetAuthenticationHeader(); 

      string DataSent = GetNameValueCollectionValuesString(pairs); 

      try 
      { 
       response = client.UploadValues(uri, pairs); 
       responsestring = Encoding.ASCII.GetString(response); 
      } 
      catch (Exception e) 
      { 
       responsestring = "CONNECTION ERROR: " + e.Message; 
       return Encoding.ASCII.GetBytes(responsestring); 
      } 
      finally 
      { 
       _communicationLogger.LogCommunication(uri, client.Headers.ToString(), DataSent, responsestring); 
      } 
     } 

     return response; 
    } 

हम https वाला URI शुरुआत में गुजर रहे हैं:: यहाँ एक समारोह कुछ डेटा भेजता है वह यह है कि //

यह एक लंबे समय के लिए महान काम कर रहा है। आज, हमने निम्नलिखित कनेक्शन त्रुटि प्राप्त करना शुरू कर दिया: "अंतर्निहित कनेक्शन बंद था: प्रेषण पर एक अनपेक्षित त्रुटि हुई"। हमने सर्वर के मालिक के साथ कुछ समस्या निवारण किया, और अंत में उन्होंने इसे नीचे तक सीमित कर दिया। उन्होंने टीएलएस 1.0 को अवरुद्ध करने के लिए अपने सर्वर में बदलाव किया, और कहा कि अब हमें टीएलएस 1.1 या 1.2 का उपयोग करके अपना डेटा भेजने की जरूरत है।

टीएलएस 1.0 के बजाय टीएलएस 1.1 या 1.2 का उपयोग करने के लिए मुझे अपने वेब क्लाइंट ऑब्जेक्ट (या मेरे फ़ंक्शन में कहीं और) में सेट करने की आवश्यकता क्या है?

हम .NET Framework 4.5 का उपयोग कर रहे हैं यदि इससे कोई फर्क पड़ता है।

+1

@ कोडकस्टर, जबकि उत्तर [इस सवाल] के समान हो सकता है (http://stackoverflow.com/q/26389899/372643), यह स्पष्ट नहीं है कि यह एक डुप्लिकेट है। उस अन्य प्रश्नोत्तर में 'वेब क्लाइंट' का कोई उल्लेख नहीं है, इसलिए यह बताएं कि इन वर्गों से संबंधित कैसे उपयोगी हो सकते हैं, और पूछने वाले और अन्य पाठकों को प्रति-उदाहरण के आधार पर इसे स्थापित करने के संभावित समाधानों में रुचि हो सकती है, उदाहरण के लिए । – Bruno

+0

आप जिस मंच का उपयोग कर रहे हैं उसके आधार पर, आपको [इस अन्य प्रश्न में भी रुचि हो सकती है] (http://stackoverflow.com/q/30479973/372643)। – Bruno

+0

@ ब्रूनो यकीन है, लेकिन इसका भी उत्तर दिया गया है। हालांकि मुझे एक उचित नहीं मिला, और [मैंने जो डुप्पी चुना []] http://stackoverflow.com/questions/26389899/) यह सब कुछ अच्छी तरह से बताता है। यह दोबारा सवाल अब _ "सिस्टम '.NET.ServicePointManager.SecurityProtocol' _ _ का उपयोग करने के लिए प्रवण है, क्योंकि उनमें से कोई भी उचित स्पष्टीकरण है, क्योंकि पहले से ही सैकड़ों हैं। और [अनुरोध के अनुसार .net HttpWebRequest पर सुरक्षाप्रोटोकॉल (एसएसएल 3 या टीएलएस) सेट करें] (http://stackoverflow.com/questions/3791629/), आप इसे प्रति अनुरोध सेट नहीं कर सकते हैं। WebClient वैसे भी HttpWebRequest आंतरिक रूप से उपयोग करता है। – CodeCaster

उत्तर

29

सुझाव अन्य प्रश्न से, मैं अपने कोड के लिए निम्न पंक्ति जोड़कर इसे हल करने में सक्षम था:

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

ग्राहक, और उसके बाद से यह विकलांग TLS 1.0 सर्वर कनेक्शन स्वीकार कर लिया।

उम्मीद है कि यह किसी अन्य समस्या को किसी अन्य समस्या से मदद करता है। हालांकि उत्तर उन अन्य प्रश्नों के समान है, लेकिन यह सवाल यह नहीं था कि यह मामला था, इसलिए मुझे नहीं लगता कि यह एक डुप्लिकेट है।

+0

आपके द्वारा साझा किया गया कोड .NET 4.0 एप्लिकेशन या नए के लिए है। पुराने .NET ऐप्स के लिए, https://stackoverflow.com/a/44893192/160830 देखें –

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