我编写了一个webservice客户端,现在无法通过https运行。虽然我将cert.pfx(alias=cert)导入到java cacerts中,并成功地添加了一个带有certs别名的条目。
我仍然不能在wsdl url上使用wimport提示符。它说:PKIX路径构建失败,无法找到请求目标的有效认证路径。嗯好的。所以我研究了一下,试着用
设置它setlocal set _JAVA_OPTIONS=%_JAVA_OPTIONS%
-Djavax.net.ssl.trustStore="C:Program FilesJavajdk1.7.0_79jrelibsecuritycacerts"
-Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=xxxxxxxxx -Djavax.net.ssl.keyStore="d:cert.pfx" "C:Program FilesJavajdk1.7.0_79binwsimport" -s C:Usersmekeystorebins
-keep https://service.xxxxxxxxxxx.de/xxxxxxxxxxxxTest?wsdl endlocal
没有成功。
我还尝试从cert.pfx文件中导出证书,然后通过keytool -exportcert和keytool -importcert将证书导入cacerts。后来我尝试从浏览器导出证书(因为我的浏览器处理证书很好,可以访问https url)。我将根证书导出为根文件。cer文件并将此。cer导入到我的cacerts中(我必须使用与cert不同的别名。使用cert作为别名,我得到了"密钥不匹配";
使用keytool提示符时在控制台中显示的消息)。在cacerts上的转储显示在cacerts中确实有一个条目。我不明白为什么java拒绝在url上做一个wimport。
最后,我只是将url目标下载到我的机器上,并对下载的.xml文件进行wimport,然后更改生成的存根中的url参数。没有帮助,虽然,因为当我运行应用程序我跑进"PKIX…无法找到到所请求目标的有效认证路径;错误。
在尝试修改jvm选项之前,还需要将*.der证书导入到密钥存储库中。
以下是如何导入证书以修复以下错误的总体摘要:
尝试执行请求时出错。javax.net.ssl.SSLHandshakeException:sun.security.validator. validatoreexception: PKIX路径构建失败sun.security.provider.certpath.SunCertPathBuilderException:无法查找到请求目标的有效认证路径
如何导入证书
- 进入浏览器的URL,点击HTTPS证书链(URL地址旁边的小锁符号)以导出证书
- 点击"更多信息">"安全">"显示证书">"详细信息">"导出…" 另存为
.der
- 对需要导入的任何证书重复执行
- 定位 $ JAVA_HOME/jre/lib/安全/除
-
导入所有*.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"