作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 .NET 中验证 HTTPS/SSL 证书的有效性?
理想情况下,我想建立一个到网站的 HTTPS 连接,然后确定是否以有效方式完成(证书未过期、主机名匹配、证书链受信任等),但内置的 HTTP 客户端似乎忽略了证书错误(我不确定是否需要物理下载网页来验证证书?)。
我尝试使用下面的代码(改编自评论中的答案),但从未调用过 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");
...它会起作用。
关于c# - 如何在 .NET 中验证 HTTPS/SSL 证书的有效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44953894/
我是一名优秀的程序员,十分优秀!