2017-07-06 173 views
0

如何验证.NET中HTTPS/SSL证书的有效性?如何验证.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; 
     } 
    } 
+0

可能重复[C#我如何验证根CA证书(x509)链?](https://stackoverflow.com/questions/7331666/c-sharp-how-can-i-validate- a-root-ca-cert-certificate-x509-chain) – jAC

+0

ServicePointManager是否设置为忽略ssl验证? [查看本文](https://stackoverflow.com/a/12507094/1709981)。 – guwere

+0

@guwere好的开始,但它似乎不适合我?编辑了我的问题 – NickG

回答

3

它不会被调用,因为你设置ValidationCallback之后,您已提出要求。

它改成这样:

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

...,它会工作。

+0

哇 - 这是一个男生错误 - 谢谢;) – NickG