我获得了一个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文件的简单指南?
由于
答案 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)
接下来对我有用:
应用程序服务器配置。 Apache Tomcat / 7.0.52 。 server.xml :在https连接器中设置 clientAuth =&#34; true&#34; 。
应用程序服务器配置。 Apache Tomcat / 7.0.52 。 tomcat-users.xml :为用户提供证书中显示的用户 DN(主题)
网络服务JAX-WS web service eclipse tutorial。谢谢Arpit!在部署描述符(web.xml)中添加安全性约束
客户端。使用apache-cxf maven插件生成。
主要课程:
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());
客户端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
答案 2 :(得分:0)
一款出色的博客,可帮助您了解HTTPS SSL握手所需的密钥库和证书导入:
http://ruchirawageesha.blogspot.in/2010/07/how-to-create-clientserver-keystores.html
希望它可以帮助您正确设置客户端密钥库以调用Web服务。 祝你好运!