3

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

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

我已经建立了一个junit测试,我运行它来测试我的客户,但我不断得到

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

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

谢谢

4

3 回答 3

4

该错误意味着在您的信任库中找不到服务器证书。检查 .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]

要查看密钥库文件的内容,请使用

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

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

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

于 2013-06-27T15:56:32.853 回答
2

下一个对我有用:

  1. 应用服务器配置。阿帕奇 Tomcat/7.0.52server.xml :在 https 连接器中设置clientAuth="true" 。

  2. 应用服务器配置。阿帕奇 Tomcat/7.0.52tomcat-users.xml:使用您的证书中出现的用户 DN 创建一个用户(主题)

  3. Web 服务JAX-WS Web 服务 Eclipse 教程。谢谢阿皮特!在部署描述符 (web.xml) 中添加安全约束

  4. 客户。使用 apache-cxf maven 插件生成。

  5. 主类:

    HelloWorldImplService helloWorldImplService = new HelloWorldImplService();
    HelloWorld helloWorld = helloWorldImplService.getHelloWorldImplPort();
    SayHelloWorld parameters = new SayHelloWorld();
    parameters.setArg0("World");
    SayHelloWorldResponse helloWorldResponse = helloWorld.sayHelloWorld(parameters);
    System.out.println(helloWorldResponse.getReturn());
    
  6. 客户端 JVM 选项:

    -Djavax.net.ssl.trustStore=/xxxx/cacerts.jks -Djavax.net.ssl.trustStorePassword=xxxx -Djavax.net.ssl.keyStore=/xxx/user.jks -Djavax.net.ssl.keyStorePassword=xxxx
    

你可以看看这里:Java SOAP client with certificate authentication

于 2014-06-30T09:24:48.563 回答
0

一个出色的博客,可帮助您了解 HTTPS SSL 握手所需的密钥库和证书导入:

http://ruchirawageesha.blogspot.in/2010/07/how-to-create-clientserver-keystores.html

希望它可以帮助您正确设置您的客户端密钥库以调用 Web 服务。祝你好运!

于 2013-06-27T15:41:55.233 回答