2010-05-04 26 views
4

我正在使用HttpWebRequest对象通过HTTP POST访问Web服务。的要求,部分原因是,我:HttpWebRequest是否会自动处理证书验证?

  1. 验证证书中的URL匹配我张贴到
  2. 的URL验证证书是有效的,值得信赖的
  3. 验证证书没有过期

HttpWebRequest是否会自动为我处理?我假设如果出现任何这些情况,我会得到标准“无法建立SSL/TLS安全通道的信任关系”例外。

回答

2

是的。如果您想禁用此功能,则必须使用this之类的代码。

+0

任何证据表明它在任何地方都有? – Elazaron 2017-10-25 12:20:44

+0

通过链接的代码,您可以看到验证证书的事件处理程序。在那里添加自己的断点来观察它发生的情况。 – David 2017-10-25 15:43:51

0

不是。您仍然需要检查是否使用回调函数返回sslpolicyerror。请确保按照这个使用自签证书的https://rootkit.com/这样的网址测试你的实现。

void InitPhase() 
{ 
    // Override automatic validation of SSL server certificates. 
    ServicePointManager.ServerCertificateValidationCallback = 
      ValidateServerCertficate; 
} 
private static bool ValidateServerCertficate(
     object sender, 
     X509Certificate cert, 
     X509Chain chain, 
     SslPolicyErrors sslPolicyErrors) 
{ 
    if (sslPolicyErrors == SslPolicyErrors.None) 
    { 
     // Good certificate. 
     return true; 
    } 

    log.DebugFormat("SSL certificate error: {0}", sslPolicyErrors); 

    bool certMatch = false; // Assume failure 
    byte[] certHash = cert.GetCertHash(); 
    if (certHash.Length == apiCertHash.Length) 
    { 
     certMatch = true; // Now assume success. 
     for (int idx = 0; idx < certHash.Length; idx++) 
     { 
      if (certHash[idx] != apiCertHash[idx]) 
      { 
       certMatch = false; // No match 
       break; 
      } 
     } 
    } 

    // Return true => allow unauthenticated server, 
    //  false => disallow unauthenticated server. 
    return certMatch; 
} 
+0

什么是'apiCertHash'? – 2015-06-10 13:24:29

+0

@Oskar Berggren用于证书固定。 – rook 2015-06-16 04:20:07

+0

嗯,是的,但我不明白你在回答这个问题时“不是真的”是什么意思。我相信如果问题中提到的三条规则中的任何一条都被破坏,即使没有回调,SSL策略也会验证连接失败。实际上,回调将用于接受连接,尽管这些检查失败。 – 2015-06-16 08:54:58