【问题标题】:SSLHandshakeException: PKIX path building failed with Unable to find certificate chainSSLHandshakeException:PKIX 路径构建失败,无法找到证书链
【发布时间】:2019-08-08 20:00:25
【问题描述】:

我正在尝试使用 Java 客户端的 HTTPS 协议连接 SSRS ReportServer,它给出 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: java.security.cert.CertPathBuilderException:找不到证书链 但是我已经在 J​​ava Keystore 中添加了证书,它是证书以定义的别名显示的密钥库。 但是相同的 SSRS 请求调用正在使用 HTTP 协议。 注意:我们使用 Go-Daddy 的通配符证书进行安全通信

【问题讨论】:

    标签: java ssl https ssl-certificate ssrs-2016


    【解决方案1】:

    当您获得证书时,应该已经包含了一个 p7b(可能)。

    本质上,当 GoDaddy 颁发证书时,它们不是直接从根颁发的。

    您很可能有一个由中间机构签发的。

    您可以在https://ssl-ccp.godaddy.com/repository?origin=CALLISTO获取中间证书

    证书链需要附加到实际证书并导入服务器

    包含要导入的证书的 PEM 文件应如下所示:

    <actual certificate>
    <intermediate certificate>
    [<intermediate certificate> ...]
    

    之后,您应该不需要在客户端上执行任何其他操作。

    编辑

    重新阅读我的答案后,我意识到这个过程可能有点模糊。因此,为了让这个更完整的周期开始,我们开始了。

    1. 生成密钥对/自签名证书,例如 PKCS#12 容器。
    2. 创建 PKCS#10 证书签名请求以发送到上述证书的 GoDaddy。
    3. GoDaddy 返回签名的 X.509 证书(通常带有如何安装的说明)。
    4. 获取证书(假设 PEM 格式)并连接来自 https://ssl-ccp.godaddy.com/repository?origin=CALLISTO 的颁发链,然后从步骤 1 将其导入回 PKCS#12。
    5. 将 PKCS#12 指定为 SSRS 服务器上的 TLS 证书存储。

    【讨论】:

      【解决方案2】:

      您能否验证证书已添加到“Java 信任库”而不是密钥库(尽管两者都有 .jks 扩展名)。 看看这个https://docs.oracle.com/cd/E19830-01/819-4712/ablqw/index.html

      密钥库文件 keystore.jks 包含应用服务器的证书,包括它的私钥

      信任库文件 cacerts.jks 包含应用服务器的信任证书

      【讨论】: