我在 CryptoAPI 的证书链验证方面遇到问题,特别是在吊销检查方面。问题是我在 Windows CE 下工作(没有互联网访问权限),而 CryptoAPI 不会为它导出 CRL API。
https://msdn.microsoft.com/en-us/library/ms936955.aspx
我做了一些研究,似乎CertGetCertificateChain()
确实进行了撤销检查,但在幕后。
我已经用OpenSSL
自签名Root CA
和Intermediate CA
(用根 CA 签名)创建了,最后我用 签署了一个结束证书Intermediate CA
,其中包含crlDistributionPoints
指向以格式Intermediate CA
编码的 CRL的扩展名。PEM
为简洁起见,我们将其命名为intermediate.crl.pem
。
所以,intermediate.crl.pem
在我的磁盘上是持久的,在我的openssl.cnf
我链接它是这样的:
...
[ extensions_section ]
crlDistributionPoints=//windows//intermediate.crl.pem
...
我不确定这是否正确,但我也不确定 CryptoAPI 是否期望某些不同的格式(例如 DER 而不是 PEM)。
最后撤销检查不正确。无论证书是否在 CRL 中,我总是收到证书被吊销的错误。
你能在这里给我一些指导吗?重要的是intermediate.crl.pem
不能通过网络获取(它必须抵抗文件系统)。
另外,我注意到 Windows CE 支持一个名为Disallowed
CryptoAPI 的链引擎在验证期间检查的证书存储,如果正在验证的证书在其中,则返回错误(说证书无效)。
使用这家商店而不是 CRL 是更好的方法吗?