【问题标题】:How can you verify validity of an HTTPS/SSL certificate in .NET?如何在 .NET 中验证 HTTPS/SSL 证书的有效性?
【发布时间】: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;
        }
    }

【问题讨论】:

标签: c# .net ssl https


【解决方案1】:

它没有被调用,因为你在设置ValidationCallback 你已经提出了请求。

改成这样:

HttpWebRequest request = WebRequest.CreateHttp( url );
request.ServerCertificateValidationCallback += ServerCertificateValidationCallback;
using( HttpWebResponse response = (HttpWebResponse)request.GetResponse() ) { }
Console.WriteLine("End");

...它会起作用的。

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 2017-04-28
    • 2017-06-14
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2013-10-28
    相关资源
    最近更新 更多