我正在使用HttpWebRequest對象通過HTTP POST訪問Web服務。的要求,部分原因是,我:HttpWebRequest是否會自動處理證書驗證?
- 驗證證書中的URL匹配我張貼到
- 的URL驗證證書是有效的,值得信賴的
- 驗證證書沒有過期
HttpWebRequest是否會自動爲我處理?我假設如果出現任何這些情況,我會得到標準「無法建立SSL/TLS安全通道的信任關係」例外。
我正在使用HttpWebRequest對象通過HTTP POST訪問Web服務。的要求,部分原因是,我:HttpWebRequest是否會自動處理證書驗證?
HttpWebRequest是否會自動爲我處理?我假設如果出現任何這些情況,我會得到標準「無法建立SSL/TLS安全通道的信任關係」例外。
是的。如果您想禁用此功能,則必須使用this之類的代碼。
不是。您仍然需要檢查是否使用回調函數返回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;
}
什麼是'apiCertHash'? – 2015-06-10 13:24:29
@Oskar Berggren用於證書固定。 – rook 2015-06-16 04:20:07
嗯,是的,但我不明白你在回答這個問題時「不是真的」是什麼意思。我相信如果問題中提到的三條規則中的任何一條都被破壞,即使沒有回調,SSL策略也會驗證連接失敗。實際上,回調將用於接受連接,儘管這些檢查失敗。 – 2015-06-16 08:54:58
任何證據表明它在任何地方都有? – Elazaron 2017-10-25 12:20:44
通過鏈接的代碼,您可以看到驗證證書的事件處理程序。在那裏添加自己的斷點來觀察它發生的情況。 – David 2017-10-25 15:43:51