簡體   English   中英

c#驗證CRL列表中的證書

[英]c# verify certificate in CRL list

如何以編程方式檢查某個證書是否從其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。 為什么它不能立即訪問CRL?

嘗試運行以下MS命令。

   certutil -urlcache * delete

Windows將證書吊銷狀態緩存一段時間,使用上面的命令將刷新緩存。

這幾乎肯定是使用您計算機上的本地CRL緩存。

在命令提示符下,首先嘗試清除緩存。

certutil -urlcache crl delete

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM