PKI:检查证书撤销状态及其设置的过程

时间:2011-07-28 14:56:25

标签: certificate digital-signature pki ocsp

美好的一天!

在我的asp.net Web应用程序中,我需要检查传入的文件数字签名。我通过致电:

来做到这一点

SignedCms.CheckSignature(false)或SignerInfo.CheckSignature(false)(C#)。

我想确保在此类调用期间检查签名者的证书是否正确检查,确保系统设置正确并为我自己清除此过程。

传入的签名者证书可能包含大量的CA.因此,签名者的证书可能包括也可能不包括对CA的OCSP服务或CA的CRL服务的引用。

我希望系统以这种方式检查撤销:

IF证书引用了CA的OCSP Web服务,然后系统向CA提出请求, 其他 IF证书引用了CA的在线CRL服务,系统下载CRL并使用它 其他 系统使用本地CRL。

请你回答我的问题:

  1. 我如何(在哪里)找到描述所需行为的系统设置? (这种行为是否可以改变或修复?)
  2. 如果证书引用了CA的CRL Web服务,我是否必须定期下载并安装CA的CRL脚本,或者我可以依赖系统下载并在需要CRL检查时自动使用它们?
  3. 谢谢。

2 个答案:

答案 0 :(得分:1)

该过程在RFC 5280中描述,并且非常复杂。简而言之,您执行以下操作:

  1. 对于有问题的证书,请检查其签名,有效期和密钥使用情况
  2. 根据CRL检查证书。
  3. 根据OCSP检查证书
  4. 对于在CRL和/或OCSP检查期间遇到的每个证书,执行步骤1-3(这反过来可能涉及多个CRL和OCSP检查)。
  5. 我在这里没有提到非常复杂的政策检查。

    我花了大约一个月的时间为我们的SecureBlackbox库实现证书验证器(但我们拥有自己的一切,从CRL和OCSP客户端到这些CRL的管理)。如果要使用OS方式执行证书检查,您应该寻找为您完成工作的现有功能。

答案 1 :(得分:0)

您可以找到有关获取CRL内部的一些有用信息,更具体地说,有关CRL缓存crl-caching-in-windows-and-little-bit

的信息。

我在这里有两种方法,其中,windows cryptoAPI将自动处理撤销,包括缓存。但问题是,只有当缓存中的当前CRL到期时,cryptoAPI才会查找CA服务器。因此难以保持CRL的新鲜度。但是,如果您的CA的CRL发布频率是每天一次,那么您可能会使用CertVerifyRevocation这种方法,使用具有适当配置的Windows的函数调用来处理某些应用程序。

第二种方法是从CA服务器下载并安装CRL,并使用CertFindCertificateInCRL进行验证。您的CRL下载程序应用程序可以配置为以预定义的时间间隔更新CRL。如果CA仅发布Base CRL,则这将起作用,因为每次下载CRL时都会获得整个撤销的证书列表。我不知道答案,如果CA以较低的频率发布Delta CRL和Base CRL会发生什么。