2

如果您有如下代码: OCSP 是否用于“在线”吊销检查?

X509Chain ch = new X509Chain();
ch.ChainPolicy.RevocationMode = X509RevocationMode.Online;
ch.Build (certificate);

API文档没有明确说明这一点,说:

“使用在线证书吊销列表 (CRL) 进行吊销检查。”

但没有提供有关如何进行检查的任何细节

这些X509Chain.Buld方法检查属性szOID_AUTHORITY_INFO_ACCESS是否有值 - 我知道这是存储 OCSP URL 的地方,所以这再次表明正在使用 OCSP

Build 然后调用 BuildChain 并调用 CertGeCertificateChain,传递一个撤销标志 unsigned int。

GetCertificateChain 的文档给出了可以传入的可能标志,包括 CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT:

“此标志在链构建期间内部用于在线证书状态协议 (OCSP) 签名者证书,以防止循环撤销检查。在链构建期间,如果 OCSP 响应由独立的 OCSP 签名者签名,那么,除了原始链构建,为 OCSP 签名者证书本身构建了第二个链。在此第二个链构建期间使用此标志来禁止递归独立 OCSP 签名者证书。如果签名者证书包含 szOID_PKIX_OCSP_NOCHECK 扩展,则跳过叶签名者的吊销检查证书。允许 OCSP 和 CRL 检查。

由于存在一个“禁止”OCSP 检查的标志,我认为它确实会发生 - 但再次明确确认这一点会很好

4

1 回答 1

2

如果 OCSP 是唯一的选择,比如 Let's Encrypt,那么是的。如果 OCSP 和 CRL 都可用,则系统选择它想要的任何一个,当第一个选择产生错误/过期的答案时使用另一个。

(在 .NET Core for Linux 上,3.0 版之前未使用 OCSP)

于 2019-05-28T13:16:13.893 回答