Đây là một câu hỏi quan trọng. Giao thức SSL 3 (1996) bị phá vỡ không thể sửa chữa được bởi cuộc tấn công Poodle được công bố năm 2014. IETF đã công bố "SSLv3 KHÔNG ĐƯỢC sử dụng" . Các trình duyệt web đang từ bỏ nó. Mozilla Firefox và Google Chrome đã làm như vậy.
Hai công cụ tuyệt vời để kiểm tra hỗ trợ giao thức trong trình duyệt là kiểm tra ứng dụng khách của SSL Lab và https://www.howsmyssl.com/ . Sau này không yêu cầu Javascript, vì vậy bạn có thể thử nó từ HttpClient của .NET :
File.WriteAllText("howsmyssl-httpclient.html", new HttpClient().GetStringAsync("https://www.howsmyssl.com").Result);
Kết quả là chết tiệt:
Máy khách của bạn đang sử dụng TLS 1.0, TLS rất cũ, có thể dễ bị tấn công BEAST và không có sẵn bộ mật mã tốt nhất. Các bổ sung như AES-GCM và SHA256 để thay thế MD5-SHA-1 không khả dụng cho máy khách TLS 1.0 cũng như nhiều bộ mật mã hiện đại hơn.
Đó là liên quan. Nó có thể so sánh với Internet Explorer 7 của năm 2006.
Để liệt kê chính xác các giao thức mà máy khách HTTP hỗ trợ, bạn có thể thử các máy chủ thử nghiệm theo phiên bản cụ thể bên dưới:
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)));
Tôi đang sử dụng .NET Framework 4.6.2. Tôi thấy HttpClient chỉ hỗ trợ SSL 3 và TLS 1.0. Đó là liên quan. Điều này có thể so sánh với Internet Explorer 7 của năm 2006.
Cập nhật: Hóa ra HttpClient không hỗ trợ TLS 1.1 và 1.2, nhưng bạn phải bật chúng theo cách thủ công tại System.Net.ServicePointManager.SecurityProtocol
. Xem https://stackoverflow.com/a/26392698/284795
Tôi không biết tại sao nó sử dụng các giao thức không hợp lệ. Đó có vẻ là một lựa chọn thiết lập kém, tương đương với một lỗi bảo mật lớn (tôi cá rằng nhiều ứng dụng không thay đổi mặc định). Làm thế nào chúng tôi có thể báo cáo nó?