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 :
File.WriteAllText("howsmyssl-httpclient.html", new HttpClient().GetStringAsync("https://www.howsmyssl.com").Result);
Das Ergebnis ist verdammt:
Ihr Client verwendet TLS 1.0, das sehr alt ist, möglicherweise für BEAST-Angriffe anfällig ist und nicht über die besten verfügbaren Chiffresuiten verfügt. Ergänzungen wie AES-GCM und SHA256 als Ersatz für MD5-SHA-1 sind für einen TLS 1.0-Client sowie für viele weitere moderne Cipher Suites nicht verfügbar.
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/284795
Ich 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?