[英]Error while consuming secure SOAP base web service in JAVA
我是JAVA的新手,在Web Service Client项目中使用Web服务(.wsdl)。 我在jrd的 java cacerts商店中导入客户端证书。 我的代码如下:
System.setProperty("javax.net.ssl.trustStore","[PATH]/cacerts.jks");
System.setProperty("javax.net.ssl.trustStorePassword","changeit");
ServicesProxy service = new ServicesProxy();
ServiceRequest request = new ServiceRequest(1498);
ServiceResponse response = service.getDetails(request);
我没有握手,我得到以下异常:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
我不知道为什么会有例外。 任何帮助将不胜感激。
您可能必须在证书中添加密钥链(PEM格式)。
CA Root - >中级证书 - >证书。
或者在密钥库中找不到证书,你使用正确的别名等吗?
我不认识你使用的SOAP JAX-WS实现。
不是您的问题的解决方案,但可能有助于找到它:您可以使用VM参数-Djavax.net.debug=all
启动您的客户端,它将为您提供有关SSL连接的大量信息。
检查输出的详细信息:
https://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/ReadDebug.html
直接使用-Djavax.net.ssl.trustStore属性。
您使用的服务器还有一件事,您还需要放置jks进行握手。
例如,服务器是JBoss然后是bin
我猜您的cacert不正确或路径无法访问。 我按照这里给出的指示
使用SSL Poke验证连接
按如下方式执行该类,更改URL和端口:
$ JAVA_HOME / bin / java SSLPoke yoururl 443
成功的连接看起来像这样:
$ JAVA_HOME / bin / java SSLPoke yoururl 443
成功连接
尝试使用不同的信任库进行连接
$ JAVA_HOME / bin / java -Djavax.net.ssl.trustStore = [PATH] /cacerts.jks SSLPoke yoururl 443
如果失败,则信任库不包含正确的证书。
如何解决它
解决方案是从这里提取的
从服务器再次获取证书:
openssl s_client -connect yoururl:443
你需要openssl。 将输出保存到名为public.crt的文件中。 这就是你的文件应该是这样的:
-----BEGIN CERTIFICATE-----
< Bunch of lines of your certificate >
-----END CERTIFICATE-----
导入证书:
$ JAVA_HOME / bin / keytool -import -alias -keystore $ JAVA_HOME / jre / lib / security / cacerts -file public.crt
如果出现提示,请输入密码(默认为changeit)
建议
在同一篇文章中,不建议使用与JVM cacert不同的已配置的trustStore,因为java无法访问其他根证书。
嗨看起来证书没有正确导入或代码中使用的路径没有指向正确的密钥库。
我希望以下文章中的以下步骤可以帮助您。
http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.