因为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