将certificate.pfx导入cacerts并仍然获得" PKIX ...无法找到所请求目标的有效证书路径"错误。怎么办?

时间:2015-07-09 14:25:52

标签: java ssl wsimport pkix

我写了一个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 ...无法找到有效的证书路径到请求的目标"错误。

1 个答案:

答案 0 :(得分:1)

在尝试修改jvm选项之前,您还需要将* .der证书导入密钥库。

以下是如何导入证书以修复以下错误的总体摘要:

  

尝试执行请求时出错。   javax.net.ssl.SSLHandshakeException:   sun.security.validator.ValidatorException:PKIX路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径

如何导入证书

  1. 转到浏览器中的URL,点击HTTPS证书链(URL地址旁边的小锁符号)导出证书
    • 点击“更多信息”> “安全”> “show certificate”> “详情”> “出口..”。
    • 另存为 .der
    • 重复您需要导入的任何证书
  2. 找到 $ JAVA_HOME / jre / lib / security / cacerts
  3. 使用以下内容将所有* .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
    
  4. 默认密钥库密码为'changeit'

  5. 您可以使用显示证书指纹的此命令查看您所做的更改。

    keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts
    
  6. 如果这不能解决问题,请尝试将这些java选项添加为参数:

    -Djavax.net.ssl.trustStore="$JAVA_HOME/jre/lib/security/cacerts"
    -Djavax.net.ssl.trustStorePassword="changeit"