因爲CA證書不在根證書存儲,你將有RemoteCertificateValidationCallback()內的SslPolicyErrors.RemoteCertificateChainErrors的錯誤標誌;一個可能性是明確地驗證對自己X509Certificate2Collection證書鏈,因爲你不使用本地存儲。
if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateChainErrors)
{
X509Chain chain0 = new X509Chain();
chain0.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
// add all your extra certificate chain
chain0.ChainPolicy.ExtraStore.Add(new X509Certificate2(PublicResource.my_ca));
chain0.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;
isValid = chain0.Build((X509Certificate2)certificate);
}
你也可以重新使用在回調傳遞鏈條中,ExtraStore集合中添加額外的證書(S),並與你既然添加不可信其所需的AllowUnknownCertificateAuthority標誌驗證連鎖證書。
你也可以防止原來的錯誤由受信任的根存儲添加編程CA證書(當然它會打開一個彈出窗口,因爲這是一個重大的安全問題在全球範圍內增加一個新的受信任的CA根):
var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
X509Certificate2 ca_cert = new X509Certificate2(PublicResource.my_ca);
store.Add(ca_cert);
store.Close();
我不明白爲什麼將CA證書添加到Windows應用商店導致X509Chain在鏈中顯示它,但如果我不這樣做,它不是它的一部分。是否有人在RemoteCertificateValidationCallback內將CA證書添加到鏈中? – user985122
我仍然無法找到答案:( – user985122