【问题标题】:Why is it needed to install intermediate CA为什么需要安装中间CA
【发布时间】:2018-02-15 15:16:42
【问题描述】:

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

无法找到请求目标的有效认证路径

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

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

【问题讨论】:

    标签: java ssl https tls1.2 truststore


    【解决方案1】:

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

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

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

    为了验证 SSL,它需要整个信任链都有效,例如

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

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

    【讨论】:

      【解决方案2】:

      为什么要安装中间CA?

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        如果服务器没有将中间证书与主域证书一起发送,浏览器将开始抛出错误,指出“证书颁发机构无效”,因为它期望中间证书签署了域证书但只获得了域证书.

        【讨论】: