基于认证的安全Web服务认证

时间:2017-06-20 15:45:03

标签: authentication certificate axis keystore

我正在从我的应用程序中使用外部Web服务。目前只有选定的IP地址列入白名单。现在,webservice建议在调用webservice时使用jks密钥传递自签名证书,以避免将ip列入白名单。

webservice客户端当前正在使用axis 1.3 api。在探索之后,我找出了keytool命令来生成jks文件并使用下面的代码在调用服务之前设置jvm参数

System.setProperty("javax.net.ssl.keyStore", "C:/migration/temp/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "C:/migration/temp/cacerts.jks");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

但它没有用,相反我得到了以下异常

Thread-1,名为closeSocket() Thread-1,处理异常:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效 要求目标的认证路径

我的问题是还有其他方法可以达到这个目的。

1 个答案:

答案 0 :(得分:0)

您可以编写一个简单的Java可执行文件来打开与您设置的属性的SSL连接,并在调试模式下运行代码,如下所示:

java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=trustStore ...

http://docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#Debug

看看会发生什么。