我写了一个webservice客户端,现在无法让它通过https运行。虽然我将cert.pfx(alias = cert)导入javas cacerts并成功添加了带有certs别名的条目。
仍然无法在wsdl网址上使用wsimport提示符。它说:PKIX路径构建失败,无法找到所请求目标的有效证书路径。哦,那好吧。所以我研究了一下,尝试用
设置它setlocal set _JAVA_OPTIONS =%_ JAVA_OPTIONS% -Djavax.net.ssl.trustStore =" C:\ Program Files \ Java \ jdk1.7.0_79 \ jre \ lib \ security \ cacerts" -Djavax.net.ssl.trustStorePassword = changeit -Djavax.net.ssl.keyStoreType = PKCS12 -Djavax.net.ssl.keyStorePassword = xxxxxxxxx -Djavax.net.ssl.keyStore =" d:\ cert.pfx&# 34; " C:\ Program Files \ Java \ jdk1.7.0_79 \ bin \ wsimport" -s C:\ Users \ me \ keystore \ bin \ s -keep https://service.xxxxxxxxxxx.de/xxxxxxxxxxxxTest?wsdl endlocal
没有成功。
我还尝试将证书从cert.pfx文件中导出,然后通过keytool -exportcert和keytool -importcert将证书导入cacerts。 后来我尝试从我的浏览器导出证书(因为我的浏览器处理证书很好,可以访问https网址)。我将根证书导出到root.cer文件中并将此.cer导入我的cacerts(我必须使用与cert不同的别名。使用cert作为别名我得到了"密钥不匹配"消息在使用keytool提示时的控制台。)
cacerts上的转储显示cacerts确实有一个条目。我不明白为什么java拒绝在网址上进行wsimport。
最后,我刚刚将url目标下载到我的机器上,并在下载的.xml文件上执行了wsimport,之后更改了生成的存根中的url参数。虽然没有帮助,因为当我运行应用程序即时运行到" PKIX ...无法找到有效的证书路径到请求的目标"错误。
答案 0 :(得分:1)
在尝试修改jvm选项之前,您还需要将* .der证书导入密钥库。
以下是如何导入证书以修复以下错误的总体摘要:
尝试执行请求时出错。 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到所请求目标的有效证书路径
如何导入证书
.der
使用以下内容将所有* .der文件导入cacerts文件中:
sudo keytool -import -alias mysitestaging -keystore $JAVA_HOME/jre/lib/security/cacerts -file staging.der
sudo keytool -import -alias mysiteprod -keystore $JAVA_HOME/jre/lib/security/cacerts -file prod.der
sudo keytool -import -alias mysitedev -keystore $JAVA_HOME/jre/lib/security/cacerts -file dev.der
默认密钥库密码为'changeit'
您可以使用显示证书指纹的此命令查看您所做的更改。
keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts
如果这不能解决问题,请尝试将这些java选项添加为参数:
-Djavax.net.ssl.trustStore="$JAVA_HOME/jre/lib/security/cacerts"
-Djavax.net.ssl.trustStorePassword="changeit"