我有一个 SSL 客户端/服务器应用程序。
我的 SSL 客户端在其信任库中仅配置了一个根证书颁发机构(我们称之为 rootCA1)。
但是,我的 SSL 服务器生成一个由中间 CA(我们称之为 interCA1)签名的证书。
中间 CA 的证书(我们称之为 deviceCert)由 rootCA1(客户端信任)签名。SSL 服务器在 ssl hello 期间生成 interCA1 和 rootCA1 的证书以及 deviceCert。
现在 openssl 在客户端拒绝了这样的连接。Openssl
应该能够通过查看以下信息来建立信任链:deviceCert--signed by-->interCA1--signed by-->rootCA1
因为它信任 rootCA1,并且根据我的理解可以看到信任链。
那么为什么会失败呢?为什么需要在客户端的信任存储中配置中间 CA?
答案1
我认为配置所有中间 CA 证书的原因如下。
为了便于论证,我们假设信任链中只需要有根 CA 的证书。
然后,客户端可以信任由根 CA 签名的所有证书以及由根 CA 签署证书的任何其他中间 CA(或由持有由根 CA 签署的证书的任何其他中间 CA 签署的证书)。
现在,如果中间 CA 的私钥由于某种原因被泄露,那么这将是一个问题。
因此,通过在信任库中配置中间 CA,客户端声明它信任由其签名的证书,并且其私钥没有受到泄露。
当然有 CRL,但这是一个子主题