繁体   English   中英

在JAVA中使用安全的SOAP基本Web服务时出错

[英]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验证连接

  1. 下载SSLPoke.class
  2. 按如下方式执行该类,更改URL和端口:

    $ JAVA_HOME / bin / java SSLPoke yoururl 443

  3. 成功的连接看起来像这样:

    $ JAVA_HOME / bin / java SSLPoke yoururl 443

    成功连接

  4. 尝试使用不同的信任库进行连接

    $ JAVA_HOME / bin / java -Djavax.net.ssl.trustStore = [PATH] /cacerts.jks SSLPoke yoururl 443

如果失败,则信任库不包含正确的证书。

如何解决它

解决方案是从这里提取的

  1. 从服务器再次获取证书:

    openssl s_client -connect yoururl:443

你需要openssl。 将输出保存到名为public.crt的文件中。 这就是你的文件应该是这样的:

     -----BEGIN CERTIFICATE-----
     < Bunch of lines of your certificate >
     -----END CERTIFICATE-----
  1. 导入证书:

    $ JAVA_HOME / bin / keytool -import -alias -keystore $ JAVA_HOME / jre / lib / security / cacerts -file public.crt

如果出现提示,请输入密码(默认为changeit)

建议

在同一篇文章中,不建议使用与JVM cacert不同的已配置的trustStore,因为java无法访问其他根证书。

在使用SSL处理soap服务时,这是一个非常常见的错误,我已经有过几次了。

您的证书可能未在您的信任库中正确安装。

您可以使用OpenSSL检查并安装在信任正确的证书,如解释在这里

嗨看起来证书没有正确导入或代码中使用的路径没有指向正确的密钥库。

我希望以下文章中的以下步骤可以帮助您。

http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM