gpt4 book ai didi

c# - 撤销证书验证中的 X509RevocationMode.Online 问题

转载 作者:行者123 更新时间:2023-12-04 02:57:06 26 4
gpt4 key购买 nike

我正在在线模式下验证证书吊销,但如果 CRL 已缓存在内存中,则不会命中 CRL 分发点中提到的 url。我正在使用 fiddler 来验证是否访问了 URL。我正在执行这些步骤。

  1. 运行 fiddler 。
  2. X509RevocationMode.Online 中开始证书验证
  3. 验证fiddler,没有抓到CRL Distribution Point中提到的url。
  4. 通过 certutil -urlcache CRL delete 命令从内存中清除 crl
  5. X509RevocationMode.Online 中开始证书验证
  6. 现在 Fiddler 捕获了 CRL 分发点中提到的 URL。

从上面的步骤可以清楚地看出,只有当 CRL 未被缓存时,CRL 的 url 才会被命中。现在我的问题是:

  1. 在线访问 CRL Distribution Point 中的 URL mention 有哪些场景?
  2. 如果 CRL 已被缓存,X509Certificate 如何在不访问 URL 的情况下验证 CRL 是否已更新?
  3. 我是否遗漏了 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);
}
}
}

最佳答案

使用缓存版本而不重新检索 CRL 通常是一项功能,而不是错误。

应该发生什么:

  1. CRL 发布网站应该对检索 CRL 以进行验证的 https 客户端使用适当的缓存指令。
  2. 您机器上的缓存应该根据服务器的指令执行。 (顺便说一下,磁盘通常用于缓存互联网文件,而不是内存。)

但是,以上都不是真的。如果您想变得偏执,您可以刷新操作系统中的 Internet 文档缓存。

回复你的问题:

  1. 在线访问 CRL Distribution Point 中的 URL mention 有哪些场景? [当 CRL 不在缓存中时]
  2. 如果 CRL 已被缓存,X509Certificate 如何在不访问 URL 的情况下验证 CRL 是否已更新? [https 的缓存控件用于假定 CRL 的缓存版本与远程服务器上的版本相同。]
  3. 我是否缺少 CRL 的概念? [也许。 CRL 进程并不意味着是一个 gonzo-realtime 同步多机系统。这个想法是,大多数时候,证书自然会从到期日起到期。撤销/CRL过程不应该是一个正常过程,更应该是一个异常过程。您的问题暗示 CRL 正在逐秒更新 - 如此之快以至于普通的网络缓存技术是 Not Acceptable 。你为什么相信这个?你想保护自己免受什么伤害?是人类决定在正常到期时间之前撤销证书还是机器?]

换句话说,如果 CRL 一直在更新,那么它应该与相应设置的缓存 header 一起发送。在这种情况下,您应该测试您的操作系统是否正确地没有缓存结果。如果您担心操作系统有问题,那么您应该明确删除缓存。

添加:

A blog entry关于检查恶意软件的数字证书。

关于c# - 撤销证书验证中的 X509RevocationMode.Online 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16420448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com