Java 禁用信任管理器后使用https web服务时出错

Java 禁用信任管理器后使用https web服务时出错,java,web-services,Java,Web Services,即使在禁用TrustManager之后,我也会出现以下错误 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径 下面是我用于消费web服务的代码 public class HttpsDisable { public sta

即使在禁用TrustManager之后,我也会出现以下错误

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径

下面是我用于消费web服务的代码

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();
                }

}   
}
公共类HttpsDisable{
公共静态无效禁用CertificateValidation(){
TrustManager[]trustAllCerts=新的TrustManager[]{
新X509TrustManager(){
公共X509Certificate[]getAcceptedIssuers(){return null;}
public void checkClientTrusted(X509Certificate[]证书,字符串authType){}
public void checkServerTrusted(X509Certificate[]证书,字符串authType){}
}
};
试一试{
SSLContext sc=SSLContext.getInstance(“SSL”);
sc.init(null,trustAllCerts,new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}捕获(例外e){
e、 printStackTrace();
}
}
公共静态void main(字符串[]args){
//现在,您可以访问https URL,而无需信任存储中的证书
试一试{
禁用证书规避();
URL=新URL(“https://162.19.122.114/service.asmx?wsdl");
System.out.println(“url======================”+url);
字符串sWebserviceurl=”https://172.17.134.214/service.asmx?wsdl";
字符串sXMLInput=“26”;
AnalysisServiceSL=新的AnalysisServiceLocator();
AnalysisService=sl.getAnalysisService(新URL(sWebserviceurl));
字符串in=service.getNeedProdRes(sXMLInput);
System.out.println(“web服务输出-------\n”+in);
}捕获(格式错误){
e、 printStackTrace();
}
捕获(例外e){
e、 printStackTrace();
}
}   
}

你能告诉我哪里出了问题吗,因为上面的代码不工作,引发了上面的异常。我还将.cert文件保存在jre/lib/.cert路径中。

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

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);

我得到了java.io.IOException:HTTPS主机名错误:应该是。请告知。请告知您使用的IDE。。或者使用System.out.print(url.openStream());而不是IOUtils.copy(url.openStream(),System.out);我正在使用Eclispe Juno。但是当我使用命令提示符ping上面的webservice ip地址时,我得到了请求超时。但是当我在浏览器中点击相同的按钮时,我得到了一个xml页面,并且没有为webservice url配置代理。我没有为这个特定的ip使用任何代理。另外,请注意SSL证书已过期,这将影响web服务的使用。无论我们将如何续订证书。即使更改为System.out.print(url.openStream())也会出现相同的错误。听起来像是代理问题,请检查您的代理。代码没有问题。浏览器将自动检测代理,但终端无法。如果使用Mac,则导出HTTP\U代理=http://proxy:port如果是windows,则
设置HTTP\u代理=http://proxy:port