2015-09-25 31 views
9

numaralı iletide beklenmedik bir hata oluştu. Bu konuda bana yardımcı olabileceğinizi umuyorum. Tüm sabah Googling ve kendimi bulabildiğim veya düşündüğüm tüm çözümleri denedim. Yüklemeye çalıştığım site TLS1.2 çalıştırıyordu, test ettiğim birkaç site olduğu için TLS1.2 sorunu olmadığından emin olun. Diğer siteler iyi yüklendi.C# HttpWebRequest Temel bağlantı kapatıldı:

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; 
} 

olursa olsun ben temel alınan bağlantı kapatıldı istisna

almaya devam deneyin neyi: Bir gönderme beklenmeyen bir hata oluştu. Daha fazla ayrıntı altında

ben uzaktan parti taşıma akışını kapattı kimlik doğrulaması başarısız oldu

bulundu. NET Framework 4.0 sürümünde

cevap

36

ServicePointManager.SecurityProtocol sadece ayarlamak için two options önerdi:

  • SSL3: Güvenli Yuva Katmanı (SSL) 3.0 güvenlik protokolünü.
  • TLS: Taşıma Katmanı Güvenliği (TLS) SecurityProtocolType listeleyicisi yeni TLS protokolleri ile uzatıldı var çerçevenin sonraki sürümde 1.0 güvenlik protokolü

, bu nedenle uygulama 4.5 sürümü inci kullanabilirsiniz eğer şunları da yapabilirsiniz Kullanım:

  • Tls11: Taşıma Katmanı güvenliği (TLS) 1.2 güvenlik protokolünü belirtir: Taşıma Katmanı güvenliği (TLS) 1.1 güvenlik protokolü
  • Tls12 belirtir.

Eğer .Net 4.5 üzerinde Yani eğer ServicePointManager Tls12 bağlantılarını destekleyen akışları yaratacak böylece

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

hattınızı

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; 

değiştirin.

mantıksal bir ile birden protokolleri birleştirebilirsiniz VEYA

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

Not
deneyin protokol sayısı mümkün olduğunca düşük destekleyen tutmak için çok numaralandırma değerleri bayrak olarak kullanılabileceğini fark ettiniz mi ve bugünün güvenlik standartları ile güncel. Ssll3 artık güvenli kabul edilmiyor ve Tls1.0 SecurityProtocolType.Tls'un kullanımı azalmaktadır.

+1

Sen için istiyorum Tls | Tls11 | Çoğu durumda Tls12'. –

8

Bu özel durumu yaşadım ve ayrıca ServicePointManager.SecurityProtocol ile ilgilidir. ServicePointManager.SecurityProtocolTls | Tls11 olarak ayarlandı çünkü

Benim için bu idi (çünkü bazı web sitelerinin kırık TLS 1.2 ile uygulama ziyaretleri) ve TLS 1 ziyaret üzerine.2-only website (SSLLabs' SSL Report ile test edildi), başarısız oldu.

.NET 4.5 ve üstü için bir seçenek tüm TLS sürümlerini sağlamaktır

:

.Net 4 kullanım için
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls 
            | SecurityProtocolType.Tls11 
            | SecurityProtocolType.Tls12; 
0

:

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

Genel olarak, [büyü sabitlerini] kullanmayın (https://en.wikipedia.org/wiki/Magic_number_ (programlama) #Unnamed_numerical_constants). –

0

Kanunu muhtemelen WebTestPlugIn

public class Protocols : WebTestPlugin 
{ 

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

    } 

} 
İlgili konular