To jest ważne pytanie. Protokół SSL 3 (1996) został nieodwracalnie złamany przez atak Poodle opublikowany w 2014 roku. IETF opublikował informację „NIE WOLNO używać SSLv3” . Przeglądarki internetowe to rezygnują. Mozilla Firefox i Google Chrome już to zrobiły.
Dwa doskonałe narzędzia do sprawdzania obsługi protokołów w przeglądarkach to test klienta SSL Lab i https://www.howsmyssl.com/ . Ten ostatni nie wymaga Javascript, więc możesz go wypróbować z HttpClient .NET :
File.WriteAllText("howsmyssl-httpclient.html", new HttpClient().GetStringAsync("https://www.howsmyssl.com").Result);
Rezultat jest potępiający:
Twój klient używa protokołu TLS 1.0, który jest bardzo stary, prawdopodobnie podatny na atak BEAST i nie ma najlepszych dostępnych zestawów szyfrów. Dodatki, takie jak AES-GCM i SHA256 zastępujące MD5-SHA-1, są niedostępne dla klienta TLS 1.0, a także dla wielu innych nowoczesnych zestawów szyfrów.
To dotyczy. Jest porównywalny do Internet Explorera 7 z 2006 roku.
Aby dokładnie wymienić protokoły obsługiwane przez klienta HTTP, możesz wypróbować poniższe serwery testowe dla poszczególnych wersji:
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)));
Używam .NET Framework 4.6.2. Odkryłem, że HttpClient obsługuje tylko SSL 3 i TLS 1.0. To dotyczy. Jest to porównywalne z przeglądarką Internet Explorer 7 z 2006 roku.
Aktualizacja: Okazuje się, że HttpClient obsługuje TLS 1.1 i 1.2, ale musisz je włączyć ręcznie pod adresem System.Net.ServicePointManager.SecurityProtocol
. Zobacz https://stackoverflow.com/a/26392698/284795
Nie wiem, dlaczego po wyjęciu z pudełka używa złych protokołów. Wydaje się, że to zły wybór konfiguracji, równoznaczny z poważnym błędem bezpieczeństwa (założę się, że wiele aplikacji nie zmienia ustawień domyślnych). Jak możemy to zgłosić?