【发布时间】:2017-12-10 18:07:47
【问题描述】:
如何在 .NET 中验证 HTTPS/SSL 证书的有效性?
理想情况下,我想建立与网站的 HTTPS 连接,然后确定是否以有效方式完成(证书未过期、主机名匹配、证书链受信任等),但内置的 HTTP 客户端似乎忽略了证书错误(我不确定是否需要物理下载网页来验证证书?)。
我尝试使用下面的代码(改编自 cmets 中的答案),但 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;
}
}
【问题讨论】:
-
ServicePointManager 是否设置为忽略 ssl 验证? see this answer.
-
@guwere 好的开始,但它似乎对我不起作用?已编辑我的问题