我最終實現的解決方案是寫與定製驗證邏輯實現ICertificatePolicy一類:
private X509CertificateCollection _certs;
private ICertificatePolicy _defaultPolicy;
public bool CheckValidationResult(ServicePoint svcPoint, X509Certificate cert, WebRequest req, int problem)
{
if ((_defaultPolicy != null) && _defaultPolicy.CheckValidationResult(svcPoint, cert, req, problem))
{
return true;
}
foreach (X509Certificate caCert in _certs)
{
if (caCert.Equals(cert))
{
return true;
}
}
return false;
}
(錯誤檢查不再贅述。)
_defaultPolicy
可以設置爲ServicePointManager.CertificatePolicy
以允許除了自定義證書之外,還將使用默認證書存儲區。
_certs
包含額外的證書。它是通過解析PEM文件生成的,並致電_certs.Add(new X509Certificate(Convert.FromBase64String(base64cert)));
CertificatePolicy
已被ServerCertificateValidationCallback
廢棄,但我需要支持舊版本的.NET。
謝謝,明天再試吧 – ThiefMaster 2012-10-09 20:43:17