현재 주어진 IP 및 포트에 연결하고 HttpWebRequest를 사용하여 SSL 인증서의 정보를 확인하는 유틸리티 응용 프로그램을 작성 중입니다. 인증서 추출을 시도 할 때 예외가 발생했다는 오류가 발생합니다. 예외는 SSL 인증서를 처리하는 동작이 또 다른 유효성 검사를 트리거하는 것으로 보이기 때문인 것으로 보입니다.C#에서 HttpWebRequest와 함께 SSL 인증서를 사용하려면 어떻게해야합니까?
여기 코드가 있습니다. 어쩌면 다른 사람이 나에게 더 나은 방법을 제시하거나 내가 누락 된 부분을 표시 할 수 있습니다. SSL 인증서가 만료되었거나 URL과 일치하지 않는 경우 걱정하지 않습니다. 그것의 아무 것도 내가하는 일과 관련이 없습니다. 나는 새로운 변수에 위임의 X509Certificate에 할당하고 디버거에서 변수를 볼 때
는, 모든 속성은 SSLCert.Issuer가 'System.Security.Cryptography.CyrptographicException'
유형의 예외가 발생했습니다 보여 m_safeCertContext이I'be 그 예외를 검색 잘못된 핸들이지만, 잘못된 인증서에 이르기까지 모든 포인트가 될 수있는 :
나는 SSLCert의 속성에 액세스하려고 는, 나는 다음과 같은 예외가 던져 증명서가 만료 한 경우는 true, IP의 경우는 true 및 포트 조합이 연결됩니다. 그러나 IP를 사용하여 IP에 연결 했으므로 일반 이름과 일치하는 것이 아니기 때문에 나는 그 정보를 필요로하므로 그 정보를 기대하고 덜 신경 쓸 수 있습니다.
아래 코드는 작동하지 않는 코드와 작동하는 코드에 대한 몇 가지 주석을 넣었습니다.
// To get around the SSL validation in the HttpWebRequest
System.Net.ServicePointManager.ServerCertificateValidationCallback =
delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
System.Security.Cryptography.X509Certificates.X509Chain chain,
System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
// The below works but isn't what I want. CertName and ExpireDate are both Strings
this.CertName = ProcessSubject(certificate.Subject);
this.ExpireDate = certificate.GetExpirationDateString();
// The below works but the X509Certificate SSLCert shows exceptions in the debugger for most of the properties.
this.SSLCert = certificate;
return true; // **** Always accept
};
HttpWebRequest myRequest = (HttpWebRequest)System.Net.WebRequest.Create("https://" + this.IP + ":" + this.Port + "/SSLCheck.html");
myRequest.KeepAlive = false;
myRequest.Method = "GET";
try
{
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
}
catch (Exception e)
{
if (e.Message != "The remote server returned an error: (404) Not Found.")
{
throw Exception("Error");
}
}
// THE BELOW FAILS
this.CertName = this.SSLCert.Subject;
'HttpWebRequest'에서 SSL 및 인증서로 작업하는 것에 대해 많은 질문과 답변이 있습니다. 오른쪽의 "관련"질문을 보았습니까? 아니면 [ssl certificate httpwebrequest]를 검색 했습니까? –
예, 거의 모든 사람들이 사용하지 않는 클라이언트 인증서를 사용하는 방법을 묻습니다. 또는 이미 처리하고있는 잘못된 인증서로 인해 HttpWebRequest에서 오류가 발생합니다. – omniplex
큰 문제는 X509Certificate을 다른 X509Certificate 형식 변수에 복사하고 .NET에서 "this.SSLCert = certificate;"할 때 인증서의 유효성을 다시 확인하는 것입니다. – omniplex