【问题标题】:Calling SSL URL from Java gives certificate issues从 Java 调用 SSL URL 会导致证书问题
【发布时间】:2014-02-02 15:23:55
【问题描述】:

我正在尝试使用 SSL 做一个 API。当我执行呼叫时,我收到以下错误:

org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://yyyyy.zzz/123":sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我知道 StackOverflow 中有很多关于这个问题的问题,但我看到的问题是因为证书是自签名的。在这种情况下,证书是有效的,并且浏览器可以毫无问题地将其识别为有效证书。

所以我的问题是,为什么从 Java 调用时会失败,而在使用浏览器时却运行良好?

【问题讨论】:

    标签: java ssl


    【解决方案1】:

    我有同样的问题。浏览器识别证书(和证书路径),但 Java 虚拟机没有。错误文本是相同的。

    在我的情况下,信任根位于浏览器密钥库和 Java 信任密钥库中。所以每个人都可以检查推力路径。但是,如果您的服务器不返回整个证书路径,而只返回服务器一个,那就更难了。在这种情况下,只有当验证器在其推力存储中具有中间证书时,才能验证证书路径。

    由于 java 密钥库没有像浏览器中那样定期更新,因此您可以在浏览器中拥有中间证书,但在 JVM 中没有。

    在这种情况下可能的解决方案:

    • 服务器返回整个证书链
    • 要添加到 java 信任库中的中间证书

    更多信息请查看Certificate path discovery in Java

    【讨论】:

    • 谢谢!我上传了中间证书,现在可以使用了。
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2017-09-07
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多