Package com.subgraph.orchid.connections

Source Code of com.subgraph.orchid.connections.ConnectionSocketFactory

package com.subgraph.orchid.connections;

import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import com.subgraph.orchid.TorException;

public class ConnectionSocketFactory {
  static final String[] V1_CIPHERS_ONLY = {
    "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
      "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
      "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
  };
 
  private static final String[] MANDATORY_CIPHERS = {
    "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
      "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
      "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
      "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"};

  private static final TrustManager[] NULL_TRUST = {
    new X509TrustManager() {
      private final X509Certificate[] empty = {};
      public void checkClientTrusted(X509Certificate[] chain, String authType)
          throws CertificateException {
      }

      public void checkServerTrusted(X509Certificate[] chain, String authType)
          throws CertificateException {
      }

      public X509Certificate[] getAcceptedIssuers() {
        return empty;
      }
    }
  };
 
  private static SSLContext createSSLContext() {
    System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
    try {
      final SSLContext sslContext = SSLContext.getInstance("TLS");
      sslContext.init(null, NULL_TRUST, null);
      return sslContext;
    } catch (NoSuchAlgorithmException e) {
      throw new TorException(e);
    } catch (KeyManagementException e) {
      throw new TorException(e);
    }
  }
 
  private final SSLSocketFactory socketFactory;
 
  ConnectionSocketFactory() {
    socketFactory = createSSLContext().getSocketFactory();
  }
 
  SSLSocket createSocket() {
    try {
      final SSLSocket socket = (SSLSocket) socketFactory.createSocket();
      socket.setEnabledCipherSuites(MANDATORY_CIPHERS);
      socket.setUseClientMode(true);
      return socket;
    } catch (IOException e) {
      throw new TorException(e);
    }
  }
}
TOP

Related Classes of com.subgraph.orchid.connections.ConnectionSocketFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.