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

时间:2019-01-31 07:34:52

标签: java web-services soap

我是JAVA的新手,正在使用 Web Service Client 项目中的Web服务(.wsdl)。我将客户端证书导入到 jrd 中的java 证书存储中。我的代码如下:

        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

我不知道为什么会有例外。任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:3)

您可能必须在证书(PEM格式)中添加密钥链。

CA根->中级证书->证书。

或者在密钥库中找不到证书,是否使用正确的别名等

我无法识别您使用的SOAP JAX-WS实现。

答案 1 :(得分:2)

不是您问题的解决方案,但也许可以帮助您找到问题: 您可以使用VM参数-Djavax.net.debug=all启动客户端,这将为您提供有关SSL连接的大量信息。

在此处查看有关输出的详细信息:

https://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/ReadDebug.html

答案 2 :(得分:2)

直接使用-Djavax.net.ssl.trustStore属性。

您要在服务器中使用的另一件事是,您还需要放置jks进行握手。

例如,服务器是JBoss,然后是bin

答案 3 :(得分:2)

我猜您的证书不正确或路径不可访问。我按照here

的说明进行操作
  

使用SSL Poke验证连接性

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

      

    $ JAVA_HOME / bin / java SSL拨您的网址443

  3. 成功的连接如下所示:

      

    $ JAVA_HOME / bin / java SSL拨您的网址443

         

    成功连接

  4. 尝试使用其他信任库进行连接

      

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

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

解决方法

解决方案是从here

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

      

    openssl s_client-连接yoururl:443

您需要openssl。将输出保存到名为public.crt的文件中。这是您文件的外观:

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

      

    $ JAVA_HOME / bin / keytool-导入-别名-keystore $ JAVA_HOME / jre / lib / security / cacerts-文件public.crt

根据提示输入密码(默认为changeit)

推荐

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

答案 4 :(得分:0)

在通过SSL处理肥皂服务时,这是一个非常常见的错误,我已经遇到过几次。

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

您可以使用openssl在信任库中检查并安装正确的证书,如here

所述

答案 5 :(得分:0)

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

希望下面的文章中的步骤对您有所帮助。

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