Nachdem festgestellt wurde, dass SSL 3 für den POODLE- Angriff anfällig ist :
Welche SSL / TLS-Versionen verwendet System.Net.WebRequest, wenn eine Verbindung zu einem https-Uri hergestellt wird?
Ich verwende WebRequest, um eine Verbindung zu mehreren APIs von Drittanbietern herzustellen. Eine davon hat jetzt angekündigt, dass sie jede Anforderung blockieren wird, die SSL 3 verwendet. WebRequest ist jedoch Teil des .Net-Kernframeworks (unter Verwendung von 4.5), sodass nicht klar ist, welche Version verwendet wird.
Antworten:
Bei Verwendung von System.Net.WebRequest verhandelt Ihre Anwendung mit dem Server, um die höchste TLS-Version zu ermitteln, die sowohl von Ihrer Anwendung als auch vom Server unterstützt wird, und verwendet diese. Weitere Details dazu finden Sie hier:
http://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_handshake
Wenn der Server TLS nicht unterstützt, wird auf SSL zurückgegriffen, daher kann möglicherweise auf SSL3 zurückgegriffen werden. Sie können alle von .NET 4.5 unterstützten Versionen hier sehen:
http://msdn.microsoft.com/en-us/library/system.security.authentication.sslprotocols(v=vs.110).aspx
Um zu verhindern, dass Ihre Anwendung für POODLE anfällig ist, können Sie SSL3 auf dem Computer deaktivieren, auf dem Ihre Anwendung ausgeführt wird, indem Sie die folgenden Erläuterungen befolgen:
/server/637207/on-iis-how-do-i-patch-the-ssl-3-0-poodle-vulnerability-cve-2014-3566
quelle
SecurityProtocolType.Tls
(und damit TLS 1.0) in .net Framework 3.5 oder niedriger habenTLS
dass dies tatsächlich auf Betriebssystem- / Maschinenebene implementiert werden würde. Tritt dort nicht der eigentliche HTTP-Verkehr auf? Daher halte ich es nicht für sinnvoll, Ihren Code anzuweisen, ein bestimmtes TLS zu verwenden, das wirklich vom Betriebssystem bestimmt wird.Dies ist eine wichtige Frage. Das SSL 3-Protokoll (1996) wird durch den 2014 veröffentlichten Pudelangriff irreparabel gebrochen. Die IETF hat "SSLv3 darf NICHT verwendet werden" veröffentlicht . Webbrowser lassen es fallen. Mozilla Firefox und Google Chrome haben dies bereits getan.
Zwei hervorragende Tools zum Überprüfen der Protokollunterstützung in Browsern sind der Client-Test von SSL Lab und https://www.howsmyssl.com/ . Letzteres erfordert kein Javascript, sodass Sie es über den HttpClient von .NET ausprobieren können :
// set proxy if you need to // WebRequest.DefaultWebProxy = new WebProxy("http://localhost:3128"); File.WriteAllText("howsmyssl-httpclient.html", new HttpClient().GetStringAsync("https://www.howsmyssl.com").Result); // alternative using WebClient for older framework versions // new WebClient().DownloadFile("https://www.howsmyssl.com/", "howsmyssl-webclient.html");
Das Ergebnis ist verdammt:
Das ist besorgniserregend. Es ist vergleichbar mit dem Internet Explorer 7 von 2006.
Um genau aufzulisten, welche Protokolle ein HTTP-Client unterstützt, können Sie die folgenden versionenspezifischen Testserver ausprobieren:
var test_servers = new Dictionary<string, string>(); test_servers["SSL 2"] = "https://www.ssllabs.com:10200"; test_servers["SSL 3"] = "https://www.ssllabs.com:10300"; test_servers["TLS 1.0"] = "https://www.ssllabs.com:10301"; test_servers["TLS 1.1"] = "https://www.ssllabs.com:10302"; test_servers["TLS 1.2"] = "https://www.ssllabs.com:10303"; var supported = new Func<string, bool>(url => { try { return new HttpClient().GetAsync(url).Result.IsSuccessStatusCode; } catch { return false; } }); var supported_protocols = test_servers.Where(server => supported(server.Value)); Console.WriteLine(string.Join(", ", supported_protocols.Select(x => x.Key)));
Ich verwende .NET Framework 4.6.2. Ich fand, dass HttpClient nur SSL 3 und TLS 1.0 unterstützt. Das ist besorgniserregend. Dies ist vergleichbar mit dem Internet Explorer 7 von 2006.
Update: Es stellt sich heraus, dass HttpClient TLS 1.1 und 1.2 unterstützt, Sie müssen sie jedoch manuell um aktivieren
System.Net.ServicePointManager.SecurityProtocol
. Siehe https://stackoverflow.com/a/26392698/284795Ich weiß nicht, warum es schlechte Protokolle verwendet. Das scheint eine schlechte Setup-Wahl zu sein, was einem großen Sicherheitsfehler gleichkommt (ich wette, viele Anwendungen ändern die Standardeinstellung nicht). Wie können wir es melden?
quelle
Ich habe dort auch eine Antwort gegeben, aber der Artikel, den das Update von @Colonel Panic enthält, schlägt vor, TLS 1.2 zu erzwingen. Wenn TLS 1.2 in Zukunft kompromittiert oder nur ersetzt wird, wird es als Mangel angesehen, wenn Ihr Code an TLS 1.2 festhält. Die Aushandlung von TLS1.2 ist in .Net 4.6 standardmäßig aktiviert. Wenn Sie die Option haben, Ihre Quelle auf .Net 4.6 zu aktualisieren, würde ich dringend empfehlen, TLS 1.2 zu erzwingen.
Wenn Sie TLS 1.2 erzwingen, sollten Sie unbedingt eine Art Breadcrumb belassen, der diese Kraft entfernt, wenn Sie auf das Framework 4.6 oder höher aktualisieren.
quelle