【发布时间】:2013-05-01 11:44:53
【问题描述】:
我正在在线模式下验证证书吊销,但如果 CRL 已缓存在内存中,则 CRL 分发点中提到的 url 不会被命中。我正在使用 fiddler 来验证 URL 是否被访问。我正在执行这些步骤。
- 运行提琴手。
- 在
X509RevocationMode.Online中启动证书验证 - 验证fiddler,CRL分发点中提到的url没有被抓到。
- 通过命令
certutil -urlcache CRL delete从内存中清除crl - 在
X509RevocationMode.Online中启动证书验证 - 现在 Fiddler 捕获了 CRL 分发点中提到的 URL。
从上面的步骤可以清楚地看出,只有当 CRL 没有被缓存时,CRL 的 url 才会被命中。现在我的问题是:
- 在线访问CRL分发点中提到的URL有哪些场景?
- 如果 CRL 已被缓存,X509Certificate 如何在不点击 URL 的情况下验证 CRL 是否已更新?
- 我错过了 CRL 的概念吗?
这是我的代码
private void BuildCertificateChain(X509Certificate2 certificate)
{
string error = null;
X509Chain certificateChain = new X509Chain();
certificateChain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
certificateChain.ChainPolicy.VerificationTime = DateTime.Now;
certificateChain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
certificateChain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 15);
try
{
if (certificateChain.Build(certificate))
{
foreach (X509ChainElement element in certificateChain.ChainElements)
{
Trace.WriteLine(string.Format("Issuer = {0}\nSubject = {1}", element.Certificate.Issuer, element.Certificate.Subject));
element.Certificate.Verify();
}
}
else
{
error = string.Format("File {0} digital signature seems to be not valid due to a certificate in certificate chain being revoked. Revocation reasons are:\n", filename);
foreach (X509ChainStatus status in certificateChain.ChainStatus)
{
error += status.StatusInformation;
}
}
}
catch (Exception ex)
{
error = string.Format("Exception building certificate chain for executing application {0}. The error is {1}", _executingAppFileName, ex.Message);
}
if (!string.IsNullOrEmpty(error))
{
//SetError(error);
}
}
}
【问题讨论】:
-
记得给有用的答案投票并“检查”最能回答您问题的答案。
-
别担心,欣赏是我的习惯……但让我清除所有疑问。 :)
标签: c# certificate x509certificate digital-signature x509certificate2