WebRequest
이 오류 메시지로 인해 사용중인 HTTPS 서버에 연결할 수 없습니다 .
The request was aborted: Could not create SSL/TLS secure channel.
서버에 사용 된 경로가있는 유효한 HTTPS 인증서가 없지만이 문제를 피하기 위해 다른 StackOverflow 게시물에서 가져온 다음 코드를 사용합니다.
private void Somewhere() {
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}
private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
return true;
}
문제는 서버가 인증서의 유효성을 검사하지 않고 위의 오류로 실패한다는 것입니다. 누구든지 내가 무엇을 해야할지에 대한 아이디어가 있습니까?
나는 동료와 몇 주 전에 테스트를 수행했으며 위에서 쓴 것과 비슷한 것으로 잘 작동하고 있다고 언급해야합니다. 우리가 발견 한 유일한 “주된 차이점”은 Windows 7을 사용하고 있고 Windows XP를 사용하고 있다는 것입니다. 그게 뭔가 바뀌나요?
답변
나는 마침내 답을 찾았다 (내 출처를 밝히지 않았지만 검색 한 것임).
코드는 Windows XP에서 작동하지만 Windows 7에서는 처음에 이것을 추가해야합니다.
// using System.Net;
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// Use SecurityProtocolType.Ssl3 if needed for compatibility reasons
이제는 완벽하게 작동합니다.
추가
Robin French가 언급했듯이; PayPal을 구성하는 동안이 문제가 발생하면 2018 년 12 월 3 일부터 SSL3을 지원하지 않습니다. TLS를 사용해야합니다. 여기 Paypal 페이지 가 있습니다.
답변
.NET 4.5에서 이에 대한 솔루션은
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
.NET 4.5가 없다면
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
답변
HttpWebRequest가 작성되기 전에 ServicePointManager 설정이 구성되어 있는지 확인하십시오. 그렇지 않으면 작동하지 않습니다.
공장:
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://google.com/api/")
실패 :
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://google.com/api/")
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
답변
당신이 겪고있는 문제는 aspNet 사용자가 인증서에 액세스 할 수 없다는 것입니다. winhttpcertcfg.exe를 사용하여 액세스 권한을 부여해야합니다.
설정 방법에 대한 예는 다음과 같습니다.
http://support.microsoft.com/kb/901183
자세한 정보의 2 단계에서
편집 : 최신 버전의 IIS에서이 기능은 인증서 관리자 도구에 내장되어 있으며 인증서를 마우스 오른쪽 단추로 클릭하고 개인 키 관리 옵션을 사용하여 액세스 할 수 있습니다. 자세한 내용은 /server/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791
답변
이 오류는 일반적이며 SSL / TLS 협상이 실패 할 수있는 여러 가지 이유가 있습니다. 가장 일반적인 것은 유효하지 않거나 만료 된 서버 인증서이며, 자체 서버 인증서 유효성 검사 후크를 제공하여이를 처리했지만 반드시 유일한 이유는 아닙니다. 서버가 상호 인증을 요구할 수도 있고, 클라이언트가 지원하지 않는 일련의 암호로 구성 될 수도 있습니다. 핸드 셰이크가 성공하기에는 시간이 너무 길어서 더 많은 이유가있을 수 있습니다.
가장 좋은 솔루션은 SChannel 문제 해결 도구 세트를 사용하는 것입니다. SChannel은 SSL 및 TLS를 담당하는 SSPI 공급자이며 클라이언트는 핸드 셰이크에이를 사용합니다. TLS / SSL 도구 및 설정을 살펴보십시오 .
Schannel 이벤트 로깅을 사용하는 방법 도 참조하십시오 .
답변
이 문제는 https://ct.mob0.com/Styles/Fun.png 하려고 시도했습니다 .SPDY 및 이상한 리디렉션 SSL 인증서와 같은 미친 물건을 지원하는 CDN에 CloudFlare가 배포 한 이미지입니다.
Simons 답변에서 Ssl3을 지정하는 대신 다음과 같이 Tls12로 이동하여 해결할 수있었습니다.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
new WebClient().DownloadData("https://ct.mob0.com/Styles/Fun.png");
답변
이 같은 문제로 오랜 시간이 지난 후에 클라이언트 서비스가 실행중인 ASP.NET 계정이 인증서에 액세스 할 수 없다는 것을 알았습니다. 웹 응용 프로그램이 실행되는 IIS 응용 프로그램 풀로 이동하여 고급 설정으로 이동하여 ID를에서 LocalSystem
계정으로 변경하여 문제를 해결했습니다 NetworkService
.
더 나은 솔루션은 기본 NetworkService
계정 으로 인증서를 작동시키는 것이지만 빠른 기능 테스트에 효과적입니다.