我正在尝试使用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调用时失败并且在使用浏览器时它确实运行良好?
答案 0 :(得分:0)
我有同样的问题。浏览器识别证书(和证书路径),但Java虚拟机没有。错误文本是一样的。
在我的情况下,信任根位于Browser keystore和Java trust keystore中。所以每个人都可以查看推力路径但是,如果您的服务器不返回整个证书路径,而只返回服务器1,则更难。在这种情况下,只有当验证者在其推力存储区中具有INTERMEDIATE证书时,才能验证证书路径。
由于java密钥库在浏览器中没有像这些那样定期更新,因此您可以在浏览器中使用中间证书,但不能在JVM中使用。
在这种情况下可能的解决方案: