content: // Licensed to the Apache Software Foundation (ASF) under one
  // or more contributor license agreements.  See the NOTICE file
  // distributed with this work for additional information
  // regarding copyright ownership.  The ASF licenses this file
  // to you under the Apache License, Version 2.0 (the
  // "License"); you may not use this file except in compliance
  // with the License.  You may obtain a copy of the License at
  //
  //   http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing,
  // software distributed under the License is distributed on an
  // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  // KIND, either express or implied.  See the License for the
  // specific language governing permissions and limitations
  // under the License.
  package com.cloud.network.utils;
  
  import java.io.IOException;
  import java.security.cert.CertificateException;
  import java.security.cert.X509Certificate;
  
  import javax.net.ssl.SSLContext;
  import javax.net.ssl.SSLException;
  import javax.net.ssl.SSLSession;
  import javax.net.ssl.SSLSocket;
  import javax.net.ssl.TrustManager;
  import javax.net.ssl.X509TrustManager;
  
  import org.apache.cloudstack.utils.security.SSLUtils;
  
  import org.apache.http.client.HttpClient;
  import org.apache.http.conn.ClientConnectionManager;
  import org.apache.http.conn.scheme.Scheme;
  import org.apache.http.conn.scheme.SchemeRegistry;
  import org.apache.http.conn.ssl.SSLSocketFactory;
  import org.apache.http.conn.ssl.X509HostnameVerifier;
  import org.apache.http.impl.client.DefaultHttpClient;
  
  public class HttpClientWrapper {
  
      public static HttpClient wrapClient(HttpClient base) {
          try {
              SSLContext ctx = SSLUtils.getSSLContext();
              X509TrustManager tm = new X509TrustManager() {
  
                  @Override
                  public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                  }
  
                  @Override
                  public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                  }
  
                  @Override
                  public X509Certificate[] getAcceptedIssuers() {
                      return null;
                  }
              };
              X509HostnameVerifier verifier = new X509HostnameVerifier() {
  
                  @Override
                  public void verify(String string, SSLSocket ssls) throws IOException {
                  }
  
                  @Override
                  public void verify(String string, X509Certificate xc) throws SSLException {
                  }
  
                  @Override
                  public void verify(String string, String[] strings, String[] strings1) throws SSLException {
                  }
  
                  @Override
                  public boolean verify(String string, SSLSession ssls) {
                      return true;
                  }
              };
              ctx.init(null, new TrustManager[] {tm}, null);
              SSLSocketFactory ssf = new SSLSocketFactory(ctx);
              ssf.setHostnameVerifier(verifier);
              ClientConnectionManager ccm = base.getConnectionManager();
              SchemeRegistry sr = ccm.getSchemeRegistry();
              sr.register(new Scheme("https", ssf, 443));
              return new DefaultHttpClient(ccm, base.getParams());
          } catch (Exception ex) {
              ex.printStackTrace();
              return null;
          }
      }
  }
  