【发布时间】:2011-09-29 11:32:40
【问题描述】:
在http://www.openssl.org/docs/apps/ocsp.html 记录的openssl ocsp 程序要求客户端将证书和CA 证书发送到ocsp 响应程序。然而,用于 OCSP 的 RFC 2560 并不要求这样做。 OCSP 响应者不应该预先配置 CA 证书,并且能够从客户端发送给它的证书中找到特定的 CA 吗? 感谢您的任何回答
【问题讨论】:
在http://www.openssl.org/docs/apps/ocsp.html 记录的openssl ocsp 程序要求客户端将证书和CA 证书发送到ocsp 响应程序。然而,用于 OCSP 的 RFC 2560 并不要求这样做。 OCSP 响应者不应该预先配置 CA 证书,并且能够从客户端发送给它的证书中找到特定的 CA 吗? 感谢您的任何回答
【问题讨论】:
openssl ocsp 应用程序并没有真正将整个颁发者证书发送给响应者。如果您查看 CertID (RFC 2560) 的定义
CertID ::= SEQUENCE {
hashAlgorithm AlgorithmIdentifier,
issuerNameHash OCTET STRING, -- Hash of Issuer's DN
issuerKeyHash OCTET STRING, -- Hash of Issuers public key
serialNumber CertificateSerialNumber }
有两个issuer相关字段,issuerNameHash和issuerKeyHash。为了方便起见,openssl ocsp 命令获取整个颁发者证书,并使用该证书为最终请求生成这两个字段。
一般来说,OCSP 响应程序不能针对单个 CA 证书进行预配置,因为大多数 CA 为其“根证书”颁发多个子 CA 证书 - 即 CA 通常具有以其名称颁发的单个 CA 证书根并颁发此根证书下的多个子 CA 证书,例如子 1、子 2 等等。除了管理或语义上的影响之外,这还有一个额外的好处,即对其中一个子 CA 的密钥妥协不如对根证书的严重。日常业务都是以子 CA 的名义进行的,而根密钥只是偶尔用于更新子 CA 证书,并在其余时间尽可能保持安全。
由于这些子 CA,OCSP 响应者无法轻松区分哪个子 CA 颁发了要检查的证书,并且需要该信息来确定需要检查哪个客户端证书吊销。
您可能会争辩说,响应者可以仅根据序列号来确定这一点 - 但这就是为什么只有颁发者 和 序列号的组合才能唯一标识证书的原因:两个 CA (在我们的场景中,子 CA)颁发具有相同序列号的证书。这就是协议要求客户端也发送发行者信息的原因。
【讨论】: