java - 使用 keystore 文件为 SOAP WS 运行客户端

标签 java keystore keytool

我得到了一个 SOAP WS 可以使用。 他们给了我 wsdl 文件,我可以从中创建客户端 stub (我在 cxf 中使用了 wsdl2java 实用程序)。

有了那个 wsdl,我还得到了一个 .keystore 文件,问题是我知道如何将它添加到我的 key 工具中(这甚至是正确的放置方式吗?)。

我已经构建了一个junit 测试,我运行它来测试我的客户端,但我经常得到

HTTP 传输错误:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

我在哪里可以找到有关如何处理此 .keystore 文件的简单指南?

谢谢

最佳答案

错误意味着在您的信任库中找不到服务器证书。检查 .keystore 文件的内容以查看它是否包含服务器证书(在您的信任库中列为 trustedEntry)。如果是,请设置以下系统属性(使用 -D JVM 参数或 System.setProperty())。

javax.net.ssl.trustStore=<<your .keystore>>
javax.net.ssl.trustStorePassword=<<keystore password>>

如果未设置这些属性,将从默认位置获取默认属性。[$JAVA_HOME/lib/security/jssecacerts, $JAVA_HOME/lib/security/cacerts]

要查看 keystore 文件的内容,请使用

keytool -list -v -keystore file.keystore -storepass mypassword

要调试 ssl 握手过程并查看证书,请设置 VM 参数 -Djavax.net.debug=all

如果 Web 服务需要 2 路 SSL,则客户端需要发送其身份(从您的 keystore 中获取)。在这种情况下,您的 .keystore 将包含一个 privateKeyEntry,它将在握手过程中发送到服务器。要对此进行配置,请将 JVMM 属性 javax.net.ssl.keyStore 和 javax.net.ssl.keyStorePassword 设置为指向您的 keystore 。

关于java - 使用 keystore 文件为 SOAP WS 运行客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17347111/

相关文章:

Java 集合。员工商店的集合

java - Servlet 上传 java.io.FileNotFoundException :

java - Webclient 发送没有正文的 POST 将得到 IllegalStateException

java - 我在哪里可以保存java代码中使用的私钥

java - 我可以在不重新启动 JVM 的情况下将新证书添加到 keystore 吗?

android - 使用 keytool 生成 key 对(公钥和私钥)和签名证书时无法在命令提示符中输入

java - 为什么 Java 提示我的 try-with-resources block ?

java - 信任库中信任哪些证书?

java - 如何在使用 '<pathlist>' 时指定 'keytool -importcert ... -providerpath <pathlist>...'

java - 在 tomcat 中安装 GoDaddy SSL 证书...没有证书与私钥匹配