1

再会!

在我的 asp.net Web 应用程序中,我需要检查传入的文件数字签名。我通过调用来做到这一点:

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

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

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

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

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

能否请您回答我的问题:

  1. 我如何(在哪里)找到描述所需行为的系统设置?(这种行为是可变的还是固定的?)
  2. 如果证书中引用了CA的CRL web服务,是不是需要定期通过脚本下载安装CA的CRL,还是在需要CRL检查时依赖系统自动下载使用?

谢谢你。

4

2 回答 2

1

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

  1. 对于有问题的证书,检查它的签名、有效期和密钥使用情况
  2. 根据 CRL 检查证书。
  3. 根据 OCSP 检查证书
  4. 对于在 CRL 和/或 OCSP 检查期间遇到的每个证书,执行步骤 1-3(这又可能涉及多个 CRL 和 OCSP 检查)。

我在这里没有提到非常复杂的政策检查。

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

于 2011-07-28T15:17:56.247 回答
0

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

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

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

于 2011-07-28T23:37:47.530 回答