我在运行以下代码时遇到错误:
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
我尝试将证书添加到JDK的CAcerts密钥库,但没有更改错误。他们无论如何要弄清楚它正在读取什么密钥库?或者这个问题是别的吗?
public static void main(String args[]) throws Exception {
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
String url = "https://www.mywebservice.com/ws";
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(),url);
// print SOAP Response
System.out.print("Response SOAP Message:");
soapResponse.writeTo(System.out);
soapConnection.close();
}
谢谢,我很乐意提供所需的任何其他详细信息。
答案 0 :(得分:2)
您必须将服务器证书或根CA添加到JDK使用的信任库中。默认情况下使用jre/lib/security/cacerts
。
如果您已导入服务器证书,请验证您是否实际使用了正确的JDK,或者是否已成功导入证书。您可以使用http://www.keystore-explorer.org/之类的GUI工具或使用keytool
您还可以使用包含服务器证书的JKS文件来使用您自己的信任(推荐)。以这种方式配置用法
System.setProperty ("javax.net.ssl.trustStore", path_to_your_trustore_jks_file);
System.setProperty ("javax.net.ssl.trustStorePassword", "password");