2010-01-27 51 views
5

如何以编程方式检查某个证书是否从CA CRL列表中被吊销?c#验证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。为什么它不能立即访问CRL?

回答

1

尝试运行以下MS命令。

certutil -urlcache * delete 

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

0

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

从命令提示符处,首先尝试清除缓存。 certutil -urlcache crl delete