이것은 중요한 질문입니다. SSL 3 프로토콜 (1996)은 2014 년에 발표 된 푸들 공격에 의해 돌이킬 수없는 손상을 입었습니다. IETF는 "SSLv3를 사용해서는 안됩니다"를 발표했습니다 . 웹 브라우저는 그것을 버리고 있습니다. Mozilla Firefox 와 Google Chrome 은 이미 그렇게했습니다.
브라우저에서 프로토콜 지원을 확인하는 두 가지 훌륭한 도구는 SSL Lab의 클라이언트 테스트 와 https://www.howsmyssl.com/ 입니다. 후자는 Javascript가 필요하지 않으므로 .NET의 HttpClient 에서 시도해 볼 수 있습니다 .
File.WriteAllText("howsmyssl-httpclient.html", new HttpClient().GetStringAsync("https://www.howsmyssl.com").Result);
그 결과는 다음과 같습니다.
클라이언트가 TLS 1.0을 사용하고 있습니다. TLS 1.0은 매우 오래되어 BEAST 공격에 취약 할 수 있으며 사용할 수있는 최상의 암호 그룹이 없습니다. MD5-SHA-1을 대체하기위한 AES-GCM 및 SHA256과 같은 추가 기능은 TLS 1.0 클라이언트와 더 많은 최신 암호 제품군에서 사용할 수 없습니다.
그게 문제입니다. 2006의 Internet Explorer 7과 비슷합니다.
HTTP 클라이언트가 지원하는 프로토콜을 정확하게 나열하려면 아래에서 버전 별 테스트 서버를 사용해보십시오.
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)));
.NET Framework 4.6.2를 사용하고 있습니다. HttpClient는 SSL 3 및 TLS 1.0 만 지원한다는 것을 알았습니다. 그게 문제입니다. 이것은 2006의 Internet Explorer 7과 비슷합니다.
업데이트 : HttpClient가 TLS 1.1 및 1.2를 지원하지만에서 수동으로 켜야합니다 System.Net.ServicePointManager.SecurityProtocol
. 참조 https://stackoverflow.com/a/26392698/284795를
왜 그것이 바로 잘못된 프로토콜을 사용하는지 모르겠습니다. 그것은 잘못된 설정 선택으로 보이며 주요 보안 버그에 해당합니다 (많은 응용 프로그램이 기본값을 변경하지 않을 것입니다). 어떻게 신고 할 수 있습니까?