Ich habe gegoogelt und alle Lösungen ausprobiert, die ich finden oder mir vorstellen konnte. Auf der Website, die ich zu laden versuche, wird TLS1.2 ausgeführt, ebenso wie auf einigen anderen Websites, mit denen ich getestet habe, um sicherzustellen, dass es sich nicht um ein TLS1.2-Problem handelt. Die anderen Seiten wurden gut geladen.
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;
}
Egal was ich versuche, ich bekomme immer die Ausnahme
Die zugrunde liegende Verbindung wurde geschlossen: Beim Senden ist ein unerwarteter Fehler aufgetreten.
Unter mehr Details habe ich gefunden
Die Authentifizierung ist fehlgeschlagen, da die Gegenstelle den Transportstrom geschlossen hat.
In der 4.0-Version des .Net-Frameworks wird ServicePointManager.SecurityProtocol
nur angeboten zwei Optionen einstellen:
In der nächsten Version des Frameworks wurde der Enumerator SecurityProtocolType
um die neueren Tls-Protokolle erweitert. Wenn Ihre Anwendung also die Version 4.5 verwenden kann, können Sie auch Folgendes verwenden:
Wenn Sie also auf .Net 4.5 sind, ändern Sie Ihre Leitung
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
zu
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
damit erstellt der ServicePointManager Streams, die TLS12-Verbindungen unterstützen.
Beachten Sie, dass die Aufzählungswerte als Flags verwendet werden können, sodass Sie mehrere Protokolle mit einem logischen ODER kombinieren können
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls |
SecurityProtocolType.Tls11 |
SecurityProtocolType.Tls12;
Hinweis
Versuchen Sie, die Anzahl der von Ihnen unterstützten Protokolle so gering wie möglich und mit den heutigen Sicherheitsstandards auf dem neuesten Stand zu halten. Ssll3 gilt nicht mehr als sicher und die Verwendung von Tls1.0 SecurityProtocolType.Tls
ist im Abstieg.
Ich habe diese Ausnahme erlebt und sie hing auch mit ServicePointManager.SecurityProtocol
Zusammen.
Für mich lag dies daran, dass ServicePointManager.SecurityProtocol
Auf Tls | Tls11
Gesetzt wurde (aufgrund bestimmter Websites, die die Anwendung mit defektem TLS 1.2 aufruft) und beim Besuch einer Website, die nur TLS 1.2 enthält (getestet mit SSLLabs 'SSL Report ), es ist fehlgeschlagen.
Eine Option für .NET 4.5 und höher ist die Aktivierung aller TLS-Versionen:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12;
Code für WebTestPlugIn
public class Protocols : WebTestPlugin
{
public override void PreRequest(object sender, PreRequestEventArgs e)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
}
}