@VisibleForTesting
 protected HttpURLConnection openConnection(URL url) throws IOException {
   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   if (sslShuffle) {
     HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
     try {
       httpsConn.setSSLSocketFactory(sslFactory.createSSLSocketFactory());
     } catch (GeneralSecurityException ex) {
       throw new IOException(ex);
     }
     httpsConn.setHostnameVerifier(sslFactory.getHostnameVerifier());
   }
   return conn;
 }
  private static ConnectionConfigurator newSslConnConfigurator(
      final int timeout, Configuration conf) throws IOException, GeneralSecurityException {
    final SSLFactory factory;
    final SSLSocketFactory sf;
    final HostnameVerifier hv;

    factory = new SSLFactory(SSLFactory.Mode.CLIENT, conf);
    factory.init();
    sf = factory.createSSLSocketFactory();
    hv = factory.getHostnameVerifier();

    return new ConnectionConfigurator() {
      @Override
      public HttpURLConnection configure(HttpURLConnection conn) throws IOException {
        if (conn instanceof HttpsURLConnection) {
          HttpsURLConnection c = (HttpsURLConnection) conn;
          c.setSSLSocketFactory(sf);
          c.setHostnameVerifier(hv);
        }
        setTimeouts(conn, timeout);
        return conn;
      }
    };
  }