我们在 Windows Server 2019 上运行 Microsoft 证书颁发机构。我们通过 MDM 向 Android 设备颁发证书。Android 设备用户使用需要客户端证书的 Chrome Web 浏览器(在 Android 上)浏览到 Web 应用程序(由 Apache 托管,在 PHP 8 中实现)。
我们正在安装一个具有 Microsoft OCSP 响应者角色的单独 Windows Server 2019 实例,以验证/验证提交给 Apache Web 服务器的客户端证书是否有效。Apache 有几个指令来处理 OCSP 验证。我们还想在 PHP 中验证证书以提高安全性。
根据我阅读多个 RFC 和 Microsoft 技术文档的研究,Microsoft OCSP Responder 似乎通过引用 CRL 来验证证书的吊销状态。
如果证书已从 CA 中删除而不是吊销,Microsoft OCSP 响应程序如何验证证书?如果已删除且未撤销,它们将不会显示在 CRL 中。
我在这里错过了什么吗?Microsoft OCSP 响应程序是否会根据 CA 数据库验证序列号及其吊销状态?
默认情况下,Microsoft OCSP 会将此类序列号报告为“Good”。从 Windows Server 2008 R2 开始,确定性 OCSP 响应功能被添加到 Microsoft OCSP。简而言之,CA 发布所有已颁发证书的序列号,并且 OCSP 也被配置为查看此目录。新行为执行以下操作:
UNKNOWN
状态响应。这意味着请求的序列号从未由 CA 颁发REVOKED
状态响应,GOOD
否则以其他方式响应。有关 Microsoft KB的更多详细信息:在线响应程序服务不会为 CRL 中未包含的所有证书返回确定性 GOOD
KB 包含一个脚本,它将所有已颁发证书的序列号转储到配置的文件夹中。不过剧本有点瑕疵。它仅导出脚本执行时存在于 CA 数据库中的序列。维护 CA 数据库并删除旧条目以防止 CA 数据库过度增长。这将导致已删除证书的误报
UNKNOWN
状态,尽管证书已颁发并存在于野外某处。我更喜欢保留所有发布的内容,而不管 CA 维护如何,GOOD
即使证书已从 CA 中删除,我也会做出响应。为了解决这个缺陷,我建议从脚本中删除这些行:这将在脚本运行之间保留 CA 上不再存在的序列号。