2015-09-25 9 views
9

पर एक अनपेक्षित त्रुटि आई, मुझे उम्मीद है कि आप इसके साथ मेरी सहायता कर सकते हैं। मैं पूरी सुबह गुगल रहा हूं और उन सभी समाधानों का प्रयास कर रहा हूं जो मैं खुद को ढूंढ सकता हूं या सोच सकता हूं। जिस साइट को मैं लोड करने का प्रयास कर रहा हूं वह TLS1.2 चल रहा है क्योंकि कुछ अन्य साइटें हैं जिन्हें मैंने परीक्षण करने का प्रयास किया है ताकि यह सुनिश्चित किया जा सके कि यह TLS1.2 समस्या नहीं है। अन्य साइटों को ठीक से लोड किया गया।सी # HttpWebRequest अंतर्निहित कनेक्शन बंद था:

byte[] buffer = Encoding.ASCII.GetBytes(
    "mod=www&ssl=1&dest=account_settings.ws" 
    + "&username=" + username.Replace(" ", "20%") 
    + "&password=" + password.Replace(" ", "20%")); 

ServicePointManager.MaxServicePointIdleTime = 1000; 
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; 

HttpWebRequest WebReq = 
    (HttpWebRequest)WebRequest.Create(
     "https://secure.runescape.com/m=weblogin/login.ws"); 

WebReq.Method = "POST"; 
WebReq.KeepAlive = false; 

WebReq.Referer = 
    "https://secure.runescape.com/m=weblogin/loginform.ws" 
    + "?mod=www&ssl=1&expired=0&dest=account_settings.ws"; 

WebReq.ContentType = "application/x-www-form-urlencoded"; 
WebReq.ContentLength = buffer.Length; 
Stream PostData = WebReq.GetRequestStream(); 
PostData.Write(buffer, 0, buffer.Length); 
PostData.Close(); 
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse(); 
Stream Answer = WebResp.GetResponseStream(); 
StreamReader _Answer = new StreamReader(Answer); 
reply = _Answer.ReadToEnd(); 
curAccount++; 
if (reply.Contains("Login Successful")) 
{ 
    eturn true; 
} 
else 
{ 
    eturn false; 
} 

कोई फर्क नहीं पड़ता कि मैं क्या करने की कोशिश मैं अपवाद

अंतर्निहित कनेक्शन बंद कर दिया गया था बार आ रही है: एक भेजें पर एक अप्रत्याशित त्रुटि हुई।

अधिक जानकारी के तहत मैं

पाया प्रमाणीकरण विफल क्योंकि दूरस्थ पार्टी परिवहन स्ट्रीम बंद कर दिया है।

उत्तर

36

नेट ढांचे के 4.0 संस्करण में ServicePointManager.SecurityProtocol केवल two options की पेशकश की स्थापित करने के लिए:

  • SSL3: सिक्योर सॉकेट लेयर (एसएसएल) 3.0 सुरक्षा प्रोटोकॉल।
  • टीएलएस: ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) 1.0 सुरक्षा प्रोटोकॉल

ढांचे SecurityProtocolType प्रगणक नए TLS प्रोटोकॉल के साथ बढ़ाया गया की अगली फिल्म में, तो आपके आवेदन वें 4.5 संस्करण का उपयोग कर सकते हैं अगर आप भी कर सकते हैं उपयोग:

  • Tls11: निर्दिष्ट करता ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) 1.1 सुरक्षा प्रोटोकॉल
  • Tls12: ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) 1.2 सुरक्षा प्रोटोकॉल निर्दिष्ट करता है।

तो अगर आप नेट 4.5 पर हैं

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

करने के लिए अपने लाइन

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; 

बदलें ताकि ServicePointManager धाराओं कि Tls12 कनेक्शन का समर्थन पैदा करेगा।

नोटिस करें ताकि आप एक तार्किक के साथ कई प्रोटोकॉल को जोड़ सकते हैं या प्रोटोकॉल की संख्या आप यथासंभव कम समर्थन रखने के लिए

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

नोट
प्रयास करें कि गणन मान झंडे के रूप में इस्तेमाल किया जा सकता और आज के सुरक्षा मानकों के साथ अद्यतित। एसएसएल 3 अब सुरक्षित नहीं माना जाता है और Tls1.0 SecurityProtocolType.Tls का उपयोग घट रहा है।

+1

आप शायद के लिए चाहते हैं 'टीएलएस | टीएलएस 11 | ज्यादातर मामलों में टीएलएस 12'। –

8

मुझे इस अपवाद का अनुभव हुआ, और यह ServicePointManager.SecurityProtocol से भी संबंधित था।

मेरे लिए, ऐसा इसलिए था क्योंकि ServicePointManager.SecurityProtocol को Tls | Tls11 पर सेट किया गया था (कुछ वेबसाइटों के कारण एप्लिकेशन टूटी हुई टीएलएस 1.2 के साथ विज़िट करता है) और टीएलएस 1 पर जाकर।2-केवल वेबसाइट (SSLLabs' SSL Report के साथ परीक्षण), यह असफल रहा।

.NET 4.5 और उच्चतर के लिए एक विकल्प सभी टीएलएस संस्करणों में सक्षम बनाना है:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls 
            | SecurityProtocolType.Tls11 
            | SecurityProtocolType.Tls12; 
0

नेट 4 उपयोग के लिए:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072; 
+4

आम तौर पर, [जादू स्थिरांक] का उपयोग न करें (https://en.wikipedia.org/wiki/Magic_number_ (प्रोग्रामिंग) #Unnamed_numerical_constants)। –

0

कोड WebTestPlugIn

public class Protocols : WebTestPlugin 
{ 

    public override void PreRequest(object sender, PreRequestEventArgs e) 
    { 
     ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

    } 

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

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