使用密钥库文件为SOAP WS运行客户端

时间:2013-06-27 15:21:44

标签: java keystore keytool

我获得了一个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文件的简单指南?

由于

3 个答案:

答案 0 :(得分:3)

该错误表示在您的信任库中找不到服务器证书。检查.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服务需要双向SSL,则客户端需要发送其身份(从密钥库中获取)。在这种情况下,您的.keystore将包含一个privateKeyEntry,它将在握手过程中发送到服务器。要配置它,请将JVMM属性javax.net.ssl.keyStore和javax.net.ssl.keyStorePassword设置为指向您的密钥库。

答案 1 :(得分:2)

接下来对我有用:

  1. 应用程序服务器配置。 Apache Tomcat / 7.0.52 server.xml :在https连接器中设置 clientAuth =&#34; true&#34;

  2. 应用程序服务器配置。 Apache Tomcat / 7.0.52 tomcat-users.xml :为用户提供证书中显示的用户 DN(主题)

  3. 网络服务JAX-WS web service eclipse tutorial。谢谢Arpit!在部署描述符(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
    
  7. 您可以在此处查看:Java SOAP client with certificate authentication

答案 2 :(得分:0)

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

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

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