我需要执行证书吊销检查。必须允许用户选择仅 OCSP 、仅CRL或两者。该项目使用 C#,但 .NET 不提供开箱即用的独立 OCSP/CRL 检查。
默认情况下,Windows 首先检查 OCSP,如果 OCSP 服务器不可访问,则仅检查 CRL。详情:
这不是必须执行的,也不能改变要求。
Win32 API 显然允许仅使用 OCSP 执行证书吊销检查:
- 启用了 CERT_VERIFY_REV_SERVER_OCSP_FLAG 的CertVerifyRevocation 。
对于仅限CLR 的检查,我没有看到任何类似的选项。
在我看来,唯一的方法是使用
- CryptGetObjectUrl提取 CRL url
- CryptRetrieveObjectByUrl下载 CRL
- CertVerifyCRLRevocation执行验证
问题:
有没有其他更简单的方法来使用 Win32执行仅CRL检查?
笔记:
例如,像 Bouncy Castle 这样的第三方库并没有做 Windows 为撤销检查所做的一切,我不想重新发明轮子。
这就是我坚持使用 Win32 方法的原因,因为它们已经处理了很多事情:增量 CRL、装订 OCSP、缓存、超时、重试、可配置性等。