x509revoationmode的问题.在线撤销证书验证

本文关键字:证书 验证 在线 问题 x509revoationmode | 更新日期: 2023-09-27 18:12:23

我正在在线模式下验证证书撤销,但如果CRL已经缓存在内存中,则CRL分发点中提到的url不会被击中。我正在使用提琴来验证URL是否被访问。我正在遵循这些步骤。

  1. 运行fiddler
  2. X509RevocationMode.Online
  3. 中启动证书验证
  4. 验证fiddler, CRL分发点中提到的url没有被捕获。
  5. 使用certutil -urlcache CRL delete
  6. 命令清除内存中的crl
  7. X509RevocationMode.Online中启动证书验证
  8. 现在Fiddler捕获了CRL分发点中提到的URL。

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

  1. 在线访问CRL分发点中提到的URL有哪些场景?
  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);
        }
    }
}

x509revoationmode的问题.在线撤销证书验证

使用缓存版本而不重新检索CRL通常是一个特性,而不是错误。

应该发生什么:

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

但是,以上两种情况都可能不正确。如果你想偏执,你可以在操作系统中刷新互联网文档缓存。

关于你的问题:

  1. 在线访问CRL分发点中提到的URL有哪些场景?[当CRL不在缓存中时]
  2. 如果CRL已经被缓存,那么X509Certificate如何在不点击URL的情况下验证CRL是否更新?[https的缓存控制用于假设缓存的CRL版本与远程服务器上的版本相同]
  3. 我错过CRL的概念吗?[也许。CRL进程并不意味着是一个非实时同步的多机器系统。这个想法是,大多数情况下,证书会在其到期日期后自然过期。撤销/CRL过程不应该是一个正常的过程,更应该是一个异常过程。你的问题暗示CRL正在以秒为单位更新——如此之快,以至于普通的web缓存技术是不可接受的。你为什么相信这个?你想保护自己不受什么伤害?是人类还是机器在证书的正常过期时间之前做出撤销证书的决定?)

换句话说,如果CRL一直在更新,那么应该在发送时设置相应的缓存头。在这种情况下,您应该测试操作系统是否正确地没有缓存结果。如果你担心操作系统是错误的,那么你应该显式地删除缓存。

补充道:

关于检查恶意软件数字证书的博客条目