.NETでHTTPS / SSL証明書の有効性を確認するにはどうすればよいですか?
理想的には、WebサイトへのHTTPS接続を確立し、それが有効な方法(証明書の有効期限が切れていない、ホスト名が一致する、証明書チェーンが信頼されているなど)で行われたかどうかを確認したいのですが、組み込みのHTTPクライアントは証明書エラーを無視しているようです(証明書を確認するためにWebページを物理的にダウンロードする必要があるかどうかわかりませんか?)
以下のコード(コメントの回答から適応)を使用しようとしましたが、ValidationCallbackが呼び出されることはありません:
static void Main(string[] args)
{
String url = "https://www.example.com";
HttpWebRequest request = WebRequest.CreateHttp(url);
request.GetResponse();
request.ServerCertificateValidationCallback += ServerCertificateValidationCallback;
Console.WriteLine("End");
Console.ReadKey();
}
private static bool ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
Console.WriteLine("Certificate OK");
return true;
}
else
{
Console.WriteLine("Certificate ERROR");
return false;
}
}
すでにリクエストを行ったValidationCallback
後に設定しているため、呼び出されません。
これに変更します:
HttpWebRequest request = WebRequest.CreateHttp( url );
request.ServerCertificateValidationCallback += ServerCertificateValidationCallback;
using( HttpWebResponse response = (HttpWebResponse)request.GetResponse() ) { }
Console.WriteLine("End");
...そしてそれは機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加