2010-05-04 90 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