c#验证CRL列表中的证书

时间:2010-01-27 15:03:49

标签: c# certificate

如何以编程方式检查某个证书是否已从其CA CRL列表中撤销?

我这样做:

X509Chain ch = new X509Chain();
ch.ChainPolicy.RevocationMode = X509RevocationMode.Online;
ch.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
ch.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(1000);
ch.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
ch.ChainPolicy.VerificationTime = DateTime.Now;
ch.Build(certificate);
foreach (X509ChainStatus s in ch.ChainStatus)
{
    string str = s.Status.ToString();
    Console.WriteLine("str: " + str);
}
X509Store store = new X509Store(StoreName.Disallowed, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
bool isRevoked = store.Certificates.Contains(certificate);
store.Close();
return !isRevoked && certificate.Verify();

我得到“str:RevokedStatusUnknown”。只有在我撤销证书后等了好几个小时 - >尽管我在撤销证书后立即发布了CRL,但状态仍以Revoked状态返回。为什么它不能立即访问CRL?

2 个答案:

答案 0 :(得分:1)

尝试运行以下MS命令。

   certutil -urlcache * delete

Windows缓存证书吊销状态一段时间,使用上面的命令将刷新缓存。

答案 1 :(得分:0)

这几乎可以肯定在您的计算机上使用本地CRL缓存。

在命令提示符下,首先尝试清除缓存。

certutil -urlcache crl delete