美好的一天!
在我的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。
请你回答我的问题:
谢谢。
答案 0 :(得分:1)
该过程在RFC 5280中描述,并且非常复杂。简而言之,您执行以下操作:
我在这里没有提到非常复杂的政策检查。
我花了大约一个月的时间为我们的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会发生什么。