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