为什么不同的 CA 可以使用信任链?

Why chain of trust is ok with different CA?

我有一个 .keystore 文件,Tomcat 的配置是:keystore=.keystoretruststore= .keystore
.keystore 包含一个 PrivateKeyEntry(由 CA1 签名)和一个 trustedCertEntry (CA1)。
到目前为止一切都还好。
如果在导入服务器证书时 trustedCertEntry 不存在,我会得到:
Failed to establish chain from reply
当我删除 trustedCertEntry (CA1) 时,Tomcat 无法启动,因为:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

现在我的问题是:当我删除 trustedCertEntry CA1 并导入 trustedCertEntry CA2, Tomcat启动并且证书链(在浏览器中查看)是:由 CA1.
签名的服务器证书 这怎么可能?我原以为 Tomcat 无法启动,因为 trustedCertEntry (CA2) 与 PrivateKeyEntry 不匹配,因为 PrivateKeyEntry 是从 CA1 而不是 CA2 发出的。由于 Tomcat 没有 trustedCertEntry 就无法启动。

私钥不是CA颁发的。 您的服务器证书是一对 public 和私钥。基于此密钥对创建了证书请求,并且此证书请求由 CA1 签名。只要 CA1 在浏览器证书存储中的受信任 CA 中,证书在浏览器中就有效。

更改密钥库中的 CA 不会影响服务器证书。

看起来至少一个 CA 证书是 SSL 引擎的要求 - 我猜任何导入到 JKS 的 CA 证书(即 thawte.com/roots,或 self-signed)都适用于你 - JKS 必须至少有一个。