我有以下代码,试图在我的专用PKI中针对CA验证服务器证书。它与ServicePointManager
和RemoteCertificateValidationCallback
一起使用:
static bool VerifyServerCertificate(object sender, X509Certificate certificate,
X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
X509Certificate2 ca = new X509Certificate2();
ca.Import("ca-rsa-cert.der");
X509Chain chain2 = new X509Chain();
chain2.ChainPolicy.ExtraStore.Add(ca);
// Check all properties
chain2.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
// This setup does not have revocation information
chain2.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
chain2.Build(new X509Certificate2(certificate));
if (chain2.ChainStatus.Length == 0)
{
return true;
}
bool result = chain2.ChainStatus[0].Status == X509ChainStatusFlags.NoError;
Debug.Assert(result == true);
return result;
}
问题是
chain2.ChainStatus.Length
始终为0。如果将
X509RevocationMode
设置为X509RevocationMode.Online
,则将ChainStatus.Length == 1
设置为X509ChainStatusFlags.RevocationStatusUnknown
。 (这是预期的,因为测试装备中没有吊销)。问题:0长度
ChainStatus.Length
是什么意思?问题:如果成功,为什么不使用
X509ChainStatusFlags.NoError
? 最佳答案
如果ChainStatuts.Lenght = 0;
表示您的链已正确构建。
您也可以使用Verify()
功能检查结果。它使用在线吊销模式并使用标准策略验证。