我得到了一个jar文件,没有访问代码(或修改的能力)和一个.cer ca证书文件。在运行jar文件时,我得到了这个错误(我将placeholder.hostname.com放在这里):
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "placeholder.hostname.com": 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: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target我信任linux机器上的ca证书系统,并且似乎能够通过curl和浏览器与服务器对话。我还用keytool将它添加到这个keytool中(不确定这是否有意义,因为我不是一个java开发人员)。然而,我仍然得到与上面相同的错误。
是否有办法使java信任代码之外的证书?或者这不是问题所在吗?
(如果我的安全/证书条款取消了,很抱歉)
谢谢
发布于 2021-08-29 08:58:09
错误消息的意思是: TLS客户端无法从服务器在TLS握手期间提供的叶证书到信任存储中的任何可信证书构建完整的证书路径。在没有更多细节的情况下,正如您所说的curl和浏览器工作得很好一样,我假设浏览器和curl都使用包含所需证书的信任库。如果确实如此,Java应用程序使用的信任库可能不包含相同的证书。换句话说,它使用不同的信任库。
首先要检查的是Java应用程序实际使用的信任库。为此,使用-Djavax.net.debug=ssl,handshake运行您的Java应用程序。除非javax.net.ssl.trustStore被覆盖,否则它将根据下面的层次结构使用其中一个信任库
..。如果未指定javax.net.ssl.trustStore系统属性,那么:如果文件java-home/lib/security/jssecacerts存在,则使用该文件;如果文件java-home/lib/security/cacerts存在,则使用该文件;如果这些文件都不存在,则TLS密码套件是匿名的,不执行任何身份验证,因此不需要信任存储。..。
我怀疑您已经将证书添加到了系统范围的信任库中,但没有添加到特定于Java的库中。
https://stackoverflow.com/questions/68896430
复制相似问题