http://www.openssl.org/docs/apps/ocsp.html上记录的openssl ocsp程序要求客户端将证书和CA证书发送到ocsp resopnder.但是,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 }
Run Code Online (Sandbox Code Playgroud)
有两个与发行者相关的字段,issuerNameHash和issuerKeyHash.为方便起见,openssl ocsp命令获取整个颁发者证书,并使用该证书为最终请求生成这两个字段.
由于大多数CA为其"根证书"颁发了多个子CA证书,因此无法为单个CA证书预先配置OCSP响应程序 - 即CA通常在其名称中发布单个CA证书根并发布多个子证书此根证书下的CA证书本身,例如sub 1,sub 2等.除了管理或语义含义之外,还有一个额外的好处,即其中一个子CA的密钥泄露不如根证书严重.日常业务以子CA的名义完成,而根密钥只是偶尔用于更新子CA证书,并且可以在其余时间保持尽可能安全.
由于这些子CA,OCSP响应者无法轻易区分哪个子CA发布了要检查的证书,并且需要该信息来确定需要检查哪个客户端证书撤销.
您可以争辩说,响应者可以单独根据序列号来确定这一点 - 但这就是为什么只有发行者和序列号的组合才能唯一地识别证书:两个CA(在我们的方案子CA中)可能会发布证书.相同的序列号.这就是协议要求客户也发送发行者信息的原因.