即使在禁用信任管理器后,也无法使用https Web服务

时间:2013-08-10 11:37:58

标签: java web-services

即使在禁用 TrustManager

后,我也会收到以下错误
  

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径

以下是我用于消费者网络服务的代码。

public class HttpsDisable {


public static void disableCertificateValidation() {
      TrustManager[] trustAllCerts = new TrustManager[]{
        new X509TrustManager() {
          public X509Certificate[] getAcceptedIssuers() { return null; }
          public void checkClientTrusted(X509Certificate[] certs, String authType) { }
          public void checkServerTrusted(X509Certificate[] certs, String authType) { }
        }
      };
      try {
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
      } catch (Exception e) {
          e.printStackTrace();
      }
    }


public static void main(String[] args)  {


                //Now you can access an https URL without having the certificate in the truststore
                try {
                 disableCertificateValidation();
                 URL url = new URL("https://162.19.122.114/service.asmx?wsdl");
                 System.out.println("url ================ "+url);

                 String sWebserviceurl = "https://172.17.134.214/service.asmx?wsdl";
                 String sXMLInput = "<KeedAn><PrAge>26</PrAge></KeedAn>";
                    AnalysisServiceService sl = new AnalysisServiceServiceLocator();
                    AnalysisService service =  sl.getAnalysisService(new URL(sWebserviceurl));
                    String in = service.getNeedProdRes(sXMLInput);
                    System.out.println("web service output ----------\n" + in);

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
                catch (Exception e) {
                    e.printStackTrace();
                }

}   
}

你能否告诉我哪里出错了,因为上面的代码不起作用并抛出异常。我还将.cert文件保存在jre / lib / .cert路径中。

1 个答案:

答案 0 :(得分:0)

尝试此代码,它将在控制台中禁用和打印响应,

String send = "https://www.example.com";
        URL url = new URL(send);
        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager()
        {
            public java.security.cert.X509Certificate[] getAcceptedIssuers()
            {
                return null;
            }

            public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
            {
            }

            public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
            {
            }
        } };

        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

        IOUtils.copy(url.openStream(), System.out);