【问题标题】:PKIX error while receiving server certificate by InstallCert.java通过 InstallCert.java 接收服务器证书时出现 PKIX 错误
【发布时间】:2018-02-14 21:58:15
【问题描述】:

我正在尝试使用 installCert.java 获取服务器 ssl 证书

在下面的链接中

https://github.com/escline/InstallCert/blob/master/InstallCert.java

我可以获取某些服务器的服务器证书,但在尝试获取某些服务器证书时出现以下错误

javax.net.ssl.SSLHandshakeException:

sun.security.validator.ValidatorException:PKIX 路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:

我搜索了,但是每个人都说你应该将你的证书文件输入到 java cacerts 但我使用这个 java 类来获取证书文件。

我也收到socket.startHandshake();的错误

    System.out.println("Opening connection to " + host + ":" + port + "...");
    SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
    socket.setSoTimeout(10000);
    try {
        System.out.println("Starting SSL handshake...");
        socket.startHandshake();
        socket.close();
        System.out.println();
        System.out.println("No errors, certificate is already trusted");
    } catch (SSLException e) {

【问题讨论】:

    标签: java ssl x509certificate


    【解决方案1】:

    该错误表示您的 JVM 不信任服务器证书

    sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException

    您需要手动将 CA 根证书包含在 JVM 的信任库中,默认情况下是 cacerts 文件。 CA 根是服务器证书或中间实体(如果存在)的颁发者

    【讨论】:

    • 有什么办法让他信任:) 我想通过代码导出和导入证书
    • 不,你不能。 SSL 服务器不发送根 CA 证书(实际上是可选的,但实际上大多数服务器不发送)。假设将根CA添加到信任库的操作必须单独进行。这是一种避免自动信任 CA 的安全措施。请注意,如果您这样做了,攻击者可能会在第一次连接时发送信任证书
    • 当然你可以通过安装一个信任所有证书的 TrustManager 来避免这个异常,但不要在真实系统上使用它
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2013-07-09
    • 2016-01-15
    • 2021-01-19
    • 2018-03-07
    相关资源
    最近更新 更多