为什么需要安装中间CA

Why is it needed to install intermediate CA

最近,我尝试通过java访问一个HTTPS网站。我遇到了一个关于 SSL 的错误,说

unable to find valid certification path to requested target

我尝试检查我的信任库和根证书,并且还安装了由根 CA 签名的中间 CA。唯一没有的是另一个用于签署网站证书的中间 CA。

我尝试安装中间 CA 并使这些东西正常工作。我想知道,为什么需要安装中间CA?它不会以某种方式从某个地方获取它而不将其安装到我的信任库吗?

中间证书是介于您信任库中的证书和发布在服务器上的证书之间的一个(或多个)证书。您从中获得 SSL 证书的 CA 应该已经为您提供了该证书(通常是 'cabundle' 文件)。这需要在服务器上安装。

对于 Apache,您需要在旧版本中指定 SSLCertificateChainFile,或者在 2.4 及更高版本中将 cabundle 文件的内容附加到证书文件中。

对于 Nginx,您需要将 cabundle 文件的内容附加到证书文件中。

要使 SSL 生效,它需要整个信任链都有效,例如

Root CA (in your browser) -> Intermediate Certificates (if any) -> Your certificate

如果缺少中间证书,客户端将无法验证证书是否有效。

Why is it necessary to install the intermediate CA?

因为 HTTPS 网络服务器配置错误。

应该发送证书链,直到但不包括根证书。

配置 Web 服务器的人并没有这样做,所以如果您没有在本地安装链,则链中缺少 link。

正确的解决方法是网络服务器管理员正确配置服务器。解决方法就是您所做的,即在本地安装缺少的中间证书,因此 Java 可以验证完整链。

中间证书是服务器证书的直接签署者。因此,为了创建信任链,客户端验证证书直到其自签名的根证书。

如果服务器没有将中间证书与主域证书一起发送,浏览器将开始抛出错误 "Certificate Authority Invalid" 因为它期望中间证书签署了域证书但只得到了域证书。