将证书.pfx导入到cacerts中,但仍然"PKIX...unable to find valid certification path to requested target"错误。怎么办?



我编写了一个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:无法查找到请求目标的有效认证路径

如何导入证书

  1. 进入浏览器的URL,点击HTTPS证书链(URL地址旁边的小锁符号)以导出证书
    • 点击"更多信息">"安全">"显示证书">"详细信息">"导出…"
    • 另存为 .der
  2. 对需要导入的任何证书重复执行
  3. 定位 $ JAVA_HOME/jre/lib/安全/除
  4. 导入所有*.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
    
  5. 默认的密钥库密码是'changeit'

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

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

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

相关内容

最新更新