Java 忽略Apache HttpClient 4.3中的SSL证书

Java 忽略Apache HttpClient 4.3中的SSL证书,java,ssl,apache-httpcomponents,Java,Ssl,Apache Httpcomponents,如何忽略的SSL证书(全部信任) 我在SO上找到的所有答案都处理了以前的版本,API也发生了变化 相关的: 编辑: 它仅用于测试目的。孩子们,不要在家里(或在生产中)尝试 下面的代码用于信任自签名证书。创建客户端时,您必须使用: SSLContextBuilder builder = new SSLContextBuilder(); builder.loadTrustMaterial(null, new TrustSelfSignedStrategy()); SSLConnecti

如何忽略的SSL证书(全部信任)

我在SO上找到的所有答案都处理了以前的版本,API也发生了变化

相关的:

编辑:

  • 它仅用于测试目的。孩子们,不要在家里(或在生产中)尝试

    • 下面的代码用于信任自签名证书。创建客户端时,您必须使用:

      SSLContextBuilder builder = new SSLContextBuilder();
      builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
      SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
              builder.build());
      CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(
              sslsf).build();
      
      HttpGet httpGet = new HttpGet("https://some-server");
      CloseableHttpResponse response = httpclient.execute(httpGet);
      try {
          System.out.println(response.getStatusLine());
          HttpEntity entity = response.getEntity();
          EntityUtils.consume(entity);
      } finally {
          response.close();
      }
      

      我没有故意包括
      SSLConnectionSocketFactory.ALLOW\u ALL\u HOSTNAME\u VERIFIER
      :目的是允许使用自签名证书进行测试,这样您就不必从证书颁发机构获得正确的证书。您可以轻松地使用正确的主机名创建自签名证书,因此请这样做,而不是添加
      SSLConnectionSocketFactory。允许\u ALL\u HOSTNAME\u VERIFIER
      标志。

      作为@mavroprovato答案的一个补充,如果您希望信任所有证书,而不是只信任自签名证书,您可以这样做(按照您的代码样式)

      或(从我自己的代码直接复制粘贴):

      如果您还想跳过主机名验证,则需要设置

          CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(
                  sslsf).setSSLHostnameVerifier( NoopHostnameVerifier.INSTANCE).build();
      
      还有。(不推荐使用ALLOW_ALL_主机名_验证器)

      强制性警告:您不应该这样做,接受所有证书是一件坏事。然而,有一些罕见的用例需要这样做

      作为前面代码的注释,即使httpclient.execute()引发异常,您也会希望关闭响应

      CloseableHttpResponse response = null;
      try {
          response = httpclient.execute(httpGet);
          System.out.println(response.getStatusLine());
          HttpEntity entity = response.getEntity();
          EntityUtils.consume(entity);
      }
      finally {
          if (response != null) {
              response.close();
          }
      }
      
      上面的代码是使用

      <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpclient</artifactId>
          <version>4.5.3</version>
      </dependency>
      

      (正在工作的测试项目)

      如果您使用的是PoolightTPClientConnectionManager过程,上面的过程不起作用,那么将忽略自定义SSLContext。创建PoolightTPClientConnectionManager时,必须在Constructor中传递socketFactoryRegistry

      SSLContextBuilder builder = SSLContexts.custom();
      builder.loadTrustMaterial(null, new TrustStrategy() {
          @Override
          public boolean isTrusted(X509Certificate[] chain, String authType)
                  throws CertificateException {
              return true;
          }
      });
      SSLContext sslContext = builder.build();
      SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
              sslContext, new X509HostnameVerifier() {
                  @Override
                  public void verify(String host, SSLSocket ssl)
                          throws IOException {
                  }
      
                  @Override
                  public void verify(String host, X509Certificate cert)
                          throws SSLException {
                  }
      
                  @Override
                  public void verify(String host, String[] cns,
                          String[] subjectAlts) throws SSLException {
                  }
      
                  @Override
                  public boolean verify(String s, SSLSession sslSession) {
                      return true;
                  }
              });
      
      Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder
              .<ConnectionSocketFactory> create().register("https", sslsf)
              .build();
      
      PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(
              socketFactoryRegistry);
      CloseableHttpClient httpclient = HttpClients.custom()
              .setConnectionManager(cm).build();
      
      SSLContextBuilder=SSLContexts.custom();
      builder.loadTrustMaterial(空,新TrustStrategy(){
      @凌驾
      已信任公共布尔值(X509Certificate[]链,字符串authType)
      抛出证书异常{
      返回true;
      }
      });
      SSLContext SSLContext=builder.build();
      SSLConnectionSocketFactory sslsf=新SSLConnectionSocketFactory(
      sslContext,新的X509HostnameVerifier(){
      @凌驾
      公共无效验证(字符串主机、SSLSocket ssl)
      抛出IOException{
      }
      @凌驾
      公共无效验证(字符串主机,X509证书证书)
      抛出语法异常{
      }
      @凌驾
      公共无效验证(字符串主机,字符串[]cns,
      字符串[]主题)引发SSLException{
      }
      @凌驾
      公共布尔验证(字符串s,SSLSession SSLSession){
      返回true;
      }
      });
      注册表socketFactoryRegistry=RegistryBuilder
      . create().注册(“https”,sslsf)
      .build();
      PoolightPClientConnectionManager cm=新的PoolightPClientConnectionManager(
      socketFactoryRegistry);
      CloseableHttpClient httpclient=HttpClients.custom()
      .setConnectionManager(cm.build();
      
      瓦塞克的答案中增加了一点:

      SocketFactoryRegistry提供的解决方案在使用PoolightTPClientConnectionManager时有效

      SSLContextBuilder builder = SSLContexts.custom();
      builder.loadTrustMaterial(null, new TrustStrategy() {
          @Override
          public boolean isTrusted(X509Certificate[] chain, String authType)
                  throws CertificateException {
              return true;
          }
      });
      SSLContext sslContext = builder.build();
      SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
              sslContext, new X509HostnameVerifier() {
                  @Override
                  public void verify(String host, SSLSocket ssl)
                          throws IOException {
                  }
      
                  @Override
                  public void verify(String host, X509Certificate cert)
                          throws SSLException {
                  }
      
                  @Override
                  public void verify(String host, String[] cns,
                          String[] subjectAlts) throws SSLException {
                  }
      
                  @Override
                  public boolean verify(String s, SSLSession sslSession) {
                      return true;
                  }
              });
      
      Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder
              .<ConnectionSocketFactory> create().register("https", sslsf)
              .build();
      
      PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(
              socketFactoryRegistry);
      CloseableHttpClient httpclient = HttpClients.custom()
              .setConnectionManager(cm).build();
      
      然而,通过普通http的连接不再有效。您还必须为http协议添加一个PlainConnectionSocketFactory,以使其再次工作:

      Registry<ConnectionSocketFactory> socketFactoryRegistry = 
        RegistryBuilder.<ConnectionSocketFactory> create()
        .register("https", sslsf)
        .register("http", new PlainConnectionSocketFactory()).build();
      
      Registry socketFactoryRegistry=
      注册表生成器。创建()
      .注册(“https”,sslsf)
      .register(“http”,新的PlainConnectionSocketFactory()).build();
      
      (我本来会直接在vasekt的回答中添加一条评论,但我没有足够的信誉点(不确定其中的逻辑)

      无论如何……我想说的是,即使您没有明确创建/请求PoolgConnection,也不意味着您没有得到PoolgConnection

      我疯狂地想弄明白为什么原来的解决方案对我不起作用,但我忽略了vasekt的答案,因为它“不适用于我的案例”——错了


      <>我盯着我的堆栈跟踪,当我看到中间有一个池连接。砰-我累了他的加法和成功!!(我们的演示是明天,我正在绝望):-(<)/P> < P>在尝试各种选项之后,为HTTP和HTTPS工作:

      SSLContextBuilder builder = new SSLContextBuilder();
      builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
      SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                      builder.build(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
      
      Registry<ConnectionSocketFactory> registry = RegistryBuilder. 
                       <ConnectionSocketFactory> create()
                      .register("http", new PlainConnectionSocketFactory())
                      .register("https", sslsf)
                      .build();
      
      PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);
      cm.setMaxTotal(2000);
      
      CloseableHttpClient httpClient = HttpClients.custom()
                      .setSSLSocketFactory(sslsf)
                      .setConnectionManager(cm)
                      .build();
      
      SSLContextBuilder=新的SSLContextBuilder();
      loadTrustMaterial(空,新TrustSelfSignedStrategy());
      SSLConnectionSocketFactory sslsf=新SSLConnectionSocketFactory(
      builder.build(),SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
      注册表=注册表生成器。
      创建()
      .register(“http”,新的PlainConnectionSocketFactory())
      .注册(“https”,sslsf)
      .build();
      PoolightPClientConnectionManager cm=新的PoolightPClientConnectionManager(注册表);
      cm.setMaxTotal(2000年);
      CloseableHttpClient httpClient=HttpClients.custom()
      .setSSLSocketFactory(sslsf)
      .setConnectionManager(cm)
      .build();
      

      我正在使用http客户端4.3.3:
      编译'org.apache.httpcomponents:httpclient:4.3.3'
      更简单、更简短的工作代码:

      class ApacheHttpClient {
      
          /***
           * This is a https get request that bypasses certificate checking and hostname verifier.
           * It uses basis authentication method.
           * It is tested with Apache httpclient-4.4.
           * It dumps the contents of a https page on the console output.
           * It is very similar to http get request, but with the additional customization of
           *   - credential provider, and
           *   - SSLConnectionSocketFactory to bypass certification checking and hostname verifier.
           * @param path String
           * @param username String
           * @param password String
           * @throws IOException
           */
          public void get(String path, String username, String password) throws IOException {
              final CloseableHttpClient httpClient = HttpClients.custom()
                      .setDefaultCredentialsProvider(createCredsProvider(username, password))
                      .setSSLSocketFactory(createGenerousSSLSocketFactory())
                      .build();
      
              final CloseableHttpResponse response = httpClient.execute(new HttpGet(path));
              try {
                  HttpEntity entity = response.getEntity();
                  if (entity == null)
                      return;
                  System.out.println(EntityUtils.toString(entity));
              } finally {
                  response.close();
                  httpClient.close();
              }
          }
      
          private CredentialsProvider createCredsProvider(String username, String password) {
              CredentialsProvider credsProvider = new BasicCredentialsProvider();
              credsProvider.setCredentials(
                      AuthScope.ANY,
                      new UsernamePasswordCredentials(username, password));
              return credsProvider;
          }
      
          /***
           * 
           * @return SSLConnectionSocketFactory that bypass certificate check and bypass HostnameVerifier
           */
          private SSLConnectionSocketFactory createGenerousSSLSocketFactory() {
              SSLContext sslContext;
              try {
                  sslContext = SSLContext.getInstance("SSL");
                  sslContext.init(null, new TrustManager[]{createGenerousTrustManager()}, new SecureRandom());
              } catch (KeyManagementException | NoSuchAlgorithmException e) {
                  e.printStackTrace();
                  return null;
              }
              return new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
          }
      
          private X509TrustManager createGenerousTrustManager() {
              return new X509TrustManager() {
                  @Override
                  public void checkClientTrusted(X509Certificate[] cert, String s) throws CertificateException {
                  }
      
                  @Override
                  public void checkServerTrusted(X509Certificate[] cert, String s) throws CertificateException {
                  }
      
                  @Override
                  public X509Certificate[] getAcceptedIssuers() {
                      return null;
                  }
              };
          }
      }
      
      我们使用的是HTTPClient 4.3.5,我们尝试了stackoverflow上存在的几乎所有解决方案,但什么都没有, 在思考和解决问题之后,我们得到了下面的代码,它工作得非常好, 只需在创建HttpClient实例之前添加它

      您用于发出post请求的某些方法

      继续以正常形式调用和使用HttpPost实例


      使用http client 4.5时,我必须使用javasx.net.ssl.HostnameVerifier来允许任何主机名(用于测试目的)。以下是我最后做的:

      CloseableHttpClient httpClient = null;
          try {
              SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
              sslContextBuilder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
      
              HostnameVerifier hostnameVerifierAllowAll = new HostnameVerifier() 
                  {
                      public boolean verify(String hostname, SSLSession session) {
                          return true;
                      }
                  };
      
              SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build(), hostnameVerifierAllowAll);
      
              CredentialsProvider credsProvider = new BasicCredentialsProvider();
              credsProvider.setCredentials(
                  new AuthScope("192.168.30.34", 8443),
                  new UsernamePasswordCredentials("root", "password"));
      
              httpClient = HttpClients.custom()
                  .setSSLSocketFactory(sslSocketFactory)
                  .setDefaultCredentialsProvider(credsProvider)
                  .build();
      
              HttpGet httpGet = new HttpGet("https://192.168.30.34:8443/axis/services/getStuff?firstResult=0&maxResults=1000");
      
              CloseableHttpResponse response = httpClient.execute(httpGet);
      
              int httpStatus = response.getStatusLine().getStatusCode();
              if (httpStatus >= 200 && httpStatus < 300) { [...]
              } else {
                  throw new ClientProtocolException("Unexpected response status: " + httpStatus);
              }
      
          } catch (Exception ex) {
              ex.printStackTrace();
          }
          finally {
              try {
                  httpClient.close();
              } catch (IOException ex) {
                  logger.error("Error while closing the HTTP client: ", ex);
              }
          }
      
      CloseableHttpClient-httpClient=null;
      试一试{
      SSLContextBuilder sslCont
      
      class ApacheHttpClient {
      
          /***
           * This is a https get request that bypasses certificate checking and hostname verifier.
           * It uses basis authentication method.
           * It is tested with Apache httpclient-4.4.
           * It dumps the contents of a https page on the console output.
           * It is very similar to http get request, but with the additional customization of
           *   - credential provider, and
           *   - SSLConnectionSocketFactory to bypass certification checking and hostname verifier.
           * @param path String
           * @param username String
           * @param password String
           * @throws IOException
           */
          public void get(String path, String username, String password) throws IOException {
              final CloseableHttpClient httpClient = HttpClients.custom()
                      .setDefaultCredentialsProvider(createCredsProvider(username, password))
                      .setSSLSocketFactory(createGenerousSSLSocketFactory())
                      .build();
      
              final CloseableHttpResponse response = httpClient.execute(new HttpGet(path));
              try {
                  HttpEntity entity = response.getEntity();
                  if (entity == null)
                      return;
                  System.out.println(EntityUtils.toString(entity));
              } finally {
                  response.close();
                  httpClient.close();
              }
          }
      
          private CredentialsProvider createCredsProvider(String username, String password) {
              CredentialsProvider credsProvider = new BasicCredentialsProvider();
              credsProvider.setCredentials(
                      AuthScope.ANY,
                      new UsernamePasswordCredentials(username, password));
              return credsProvider;
          }
      
          /***
           * 
           * @return SSLConnectionSocketFactory that bypass certificate check and bypass HostnameVerifier
           */
          private SSLConnectionSocketFactory createGenerousSSLSocketFactory() {
              SSLContext sslContext;
              try {
                  sslContext = SSLContext.getInstance("SSL");
                  sslContext.init(null, new TrustManager[]{createGenerousTrustManager()}, new SecureRandom());
              } catch (KeyManagementException | NoSuchAlgorithmException e) {
                  e.printStackTrace();
                  return null;
              }
              return new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
          }
      
          private X509TrustManager createGenerousTrustManager() {
              return new X509TrustManager() {
                  @Override
                  public void checkClientTrusted(X509Certificate[] cert, String s) throws CertificateException {
                  }
      
                  @Override
                  public void checkServerTrusted(X509Certificate[] cert, String s) throws CertificateException {
                  }
      
                  @Override
                  public X509Certificate[] getAcceptedIssuers() {
                      return null;
                  }
              };
          }
      }
      
      SSLContextBuilder builder = new SSLContextBuilder();
          builder.loadTrustMaterial(null, new TrustStrategy() {
              @Override
              public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                  return true;
              }
          });
      
          SSLConnectionSocketFactory sslSF = new SSLConnectionSocketFactory(builder.build(),
                  SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
      
          HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslSF).build();
          HttpPost postRequest = new HttpPost(url);
      
      CloseableHttpClient httpClient = null;
          try {
              SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
              sslContextBuilder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
      
              HostnameVerifier hostnameVerifierAllowAll = new HostnameVerifier() 
                  {
                      public boolean verify(String hostname, SSLSession session) {
                          return true;
                      }
                  };
      
              SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build(), hostnameVerifierAllowAll);
      
              CredentialsProvider credsProvider = new BasicCredentialsProvider();
              credsProvider.setCredentials(
                  new AuthScope("192.168.30.34", 8443),
                  new UsernamePasswordCredentials("root", "password"));
      
              httpClient = HttpClients.custom()
                  .setSSLSocketFactory(sslSocketFactory)
                  .setDefaultCredentialsProvider(credsProvider)
                  .build();
      
              HttpGet httpGet = new HttpGet("https://192.168.30.34:8443/axis/services/getStuff?firstResult=0&maxResults=1000");
      
              CloseableHttpResponse response = httpClient.execute(httpGet);
      
              int httpStatus = response.getStatusLine().getStatusCode();
              if (httpStatus >= 200 && httpStatus < 300) { [...]
              } else {
                  throw new ClientProtocolException("Unexpected response status: " + httpStatus);
              }
      
          } catch (Exception ex) {
              ex.printStackTrace();
          }
          finally {
              try {
                  httpClient.close();
              } catch (IOException ex) {
                  logger.error("Error while closing the HTTP client: ", ex);
              }
          }
      
      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) {
                              }
                          }
                      };
      
                try {
                      SSLContext sc = SSLContext.getInstance("SSL");
                      sc.init(null, trustAllCerts, new java.security.SecureRandom());
                      SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                              sc);
                      httpclient = HttpClients.custom().setSSLSocketFactory(
                              sslsf).build();
                      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
      
      SSLContextBuilder builder = SSLContexts.custom();
      builder.loadTrustMaterial(null, new TrustStrategy() {
          @Override
          public boolean isTrusted(X509Certificate[] chain, String authType)
                  throws CertificateException {
              return true;
          }
      });
      SSLContext sslContext = builder.build();
      SchemeIOSessionStrategy sslioSessionStrategy = new SSLIOSessionStrategy(sslContext, 
                      new HostnameVerifier(){
                  @Override
                  public boolean verify(String hostname, SSLSession session) {
                      return true;// TODO as of now allow all hostnames
                  }
              });
      Registry<SchemeIOSessionStrategy> sslioSessionRegistry = RegistryBuilder.<SchemeIOSessionStrategy>create().register("https", sslioSessionStrategy).build();
      PoolingNHttpClientConnectionManager ncm  = new PoolingNHttpClientConnectionManager(new DefaultConnectingIOReactor(),sslioSessionRegistry);
      CloseableHttpAsyncClient asyncHttpClient = HttpAsyncClients.custom().setConnectionManager(ncm).build();
      asyncHttpClient.start();        
      
      HttpClient getInsecureHttpClient() throws GeneralSecurityException {
          TrustStrategy trustStrategy = new TrustStrategy() {
              @Override
              public boolean isTrusted(X509Certificate[] chain, String authType) {
                  return true;
              }
          };
      
          HostnameVerifier hostnameVerifier = new HostnameVerifier() {
              @Override
              public boolean verify(String hostname, SSLSession session) {
                  return true;
              }
          };
      
          return HttpClients.custom()
                  .setSSLSocketFactory(new SSLConnectionSocketFactory(
                          new SSLContextBuilder().loadTrustMaterial(trustStrategy).build(),
                          hostnameVerifier))
                  .build();
      }
      
      private HttpClient getSSLHttpClient() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
      
              LogLoader.serverLog.trace("In getSSLHttpClient()");
      
              SSLContext context = SSLContext.getInstance("SSL");
      
              TrustManager tm = new X509TrustManager() {
                  public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                  }
      
                  public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                  }
      
                  public X509Certificate[] getAcceptedIssuers() {
                      return null;
                  }
              };
      
              context.init(null, new TrustManager[] { tm }, null);
      
              HttpClientBuilder builder = HttpClientBuilder.create();
              SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(context);
              builder.setSSLSocketFactory(sslConnectionFactory);
      
              PlainConnectionSocketFactory plainConnectionSocketFactory = new PlainConnectionSocketFactory();
              Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                      .register("https", sslConnectionFactory).register("http", plainConnectionSocketFactory).build();
      
              PoolingHttpClientConnectionManager ccm = new PoolingHttpClientConnectionManager(registry);
              ccm.setMaxTotal(BaseConstant.CONNECTION_POOL_SIZE);
              ccm.setDefaultMaxPerRoute(BaseConstant.CONNECTION_POOL_SIZE);
              builder.setConnectionManager((HttpClientConnectionManager) ccm);
      
              builder.disableRedirectHandling();
      
              LogLoader.serverLog.trace("Out getSSLHttpClient()");
      
              return builder.build();
          }
      
      SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null,
              TrustSelfSignedStrategy.INSTANCE).build();
      SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
              sslContext, NoopHostnameVerifier.INSTANCE);
      
      HttpClient httpClient = HttpClients.custom()
                                         .setDefaultCookieStore(new BasicCookieStore())
                                         .setSSLSocketFactory(sslSocketFactory)
                                         .build();
      
      CloseableHttpClient getInsecureHttpClient() throws GeneralSecurityException {
                  TrustStrategy trustStrategy = (chain, authType) -> true;
      
                  HostnameVerifier hostnameVerifier = (hostname, session) -> hostname.equalsIgnoreCase(session.getPeerHost());
      
                  return HttpClients.custom()
                          .setSSLSocketFactory(new SSLConnectionSocketFactory(new SSLContextBuilder().loadTrustMaterial(trustStrategy).build(), hostnameVerifier))
                          .build();
              }
      
      SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(null, new TrustStrategy() {
      
                  @Override
                  public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                      return true;
                  }
      
              }).build();
              SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                      sslContext, NoopHostnameVerifier.INSTANCE);
              CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();