コード例 #1
0
  public boolean connect() throws IOException, NoSuchAlgorithmException, KeyManagementException {
    // try{
    // Connect
    if (socket == null || socket.isClosed() || !socket.isConnected()) {
      if (socket != null && !socket.isClosed()) socket.close();

      if (sslContext == null) {
        sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, tm, new java.security.SecureRandom());
      }

      SSLSocketFactory socketFactory = sslContext.getSocketFactory();

      socket = (SSLSocket) socketFactory.createSocket(host, 443);
      socket.setSoTimeout(0);
      socket.setUseClientMode(true);
      connected = true;
      Log.i(getClass().toString(), "Connected.");
    }

    // Secure
    if (connected) {
      Log.i(getClass().toString(), "Securing...");
      SSLSession session = socket.getSession();
      secured = session.isValid();

      if (secured) {
        Log.i(getClass().toString(), "Secured.");

        output = new BufferedOutputStream(socket.getOutputStream());
      } else {
        Log.i(getClass().toString(), "Securing failed.");
      }
    }

    return connected;
  }
コード例 #2
0
 public boolean isClosed() {
   return delegate.isClosed();
 }
コード例 #3
0
  @Override
  public Socket getSocket(String host, int port, Context context) throws Exception {
    SSLSocket sslSocket = null;
    boolean connected = false;
    if (sslSocket == null || sslSocket.isClosed() || !sslSocket.isConnected()) {
      if (sslSocket != null && !sslSocket.isClosed()) sslSocket.close();
      Log.i(getClass().toString(), "Connecting...");

      final KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
      //            keyStore.load(context.getResources().openRawResource(R.raw.clientkey), ksPass);
      keyStore.load(null, null);
      //
      final KeyManagerFactory keyManager =
          KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
      keyManager.init(keyStore, null);
      //
      //            final TrustManagerFactory trustFactory =
      // TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
      //            final TrustManagerFactory trustFactory =
      // TrustManagerFactory.getInstance("SunX509");
      //            trustFactory.init(keyStore);
      //            if (sslContext == null) {
      //                sslContext = SSLContext.getInstance("TLS");
      //                sslContext.init(keyManager.getKeyManagers(),
      // trustFactory.getTrustManagers(), new SecureRandom());
      //            }

      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;
            }
          };
      sslContext = SSLContext.getInstance("TLS");
      sslContext.init(null, new TrustManager[] {tm}, null);
      //                sslContext.init(keyManager.getKeyManagers(),
      // trustFactory.getTrustManagers(), new SecureRandom());

      SSLSocketFactory socketFactory = sslContext.getSocketFactory();
      sslSocket = (SSLSocket) socketFactory.createSocket(host, port);
      sslSocket.setSoTimeout(20000);
      sslSocket.setUseClientMode(true);
      sslSocket.startHandshake();
      connected = true;
      Log.i(getClass().toString(), "Connected.");
    }

    return sslSocket;
    // Secure
    //        if (connected) {
    //            Log.i(getClass().toString(), "Securing...");
    //            SSLSession session = sslSocket.getSession();
    //            secured = session.isValid();
    //            if (secured) {
    //                Log.i(getClass().toString(), "Secured.");
    //            }
    //            else
    //                Log.i(getClass().toString(), "Securing failed.");
    //        }
  }
コード例 #4
0
  private void m(Context context) {
    SSLSocket sslSocket = null;
    try {
      boolean connected = false;
      if (sslSocket == null || sslSocket.isClosed() || !sslSocket.isConnected()) {
        if (sslSocket != null && !sslSocket.isClosed()) {
          sslSocket.close();
        }

        Log.i(getClass().toString(), "Connecting...");
        //            messages.getText().append("Connecting...");
        final KeyStore keyStore = KeyStore.getInstance("BKS");
        keyStore.load(context.getResources().openRawResource(R.raw.clientkey), null);

        final KeyManagerFactory keyManager =
            KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManager.init(keyStore, null);
        // keyManager.init(null, null);

        final TrustManagerFactory trustFactory =
            TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustFactory.init(keyStore);

        sslContext = SSLContext.getInstance("TLS");
        sslContext.init(
            keyManager.getKeyManagers(), trustFactory.getTrustManagers(), new SecureRandom());
        final SSLSocketFactory delegate = sslContext.getSocketFactory();
        SocketFactory factory =
            new SSLSocketFactory() {
              @Override
              public Socket createSocket(String host, int port)
                  throws IOException, UnknownHostException {
                InetAddress addr = InetAddress.getByName(host);
                injectHostname(addr, host);
                return delegate.createSocket(addr, port);
              }

              @Override
              public Socket createSocket(InetAddress host, int port) throws IOException {
                return delegate.createSocket(host, port);
              }

              @Override
              public Socket createSocket(
                  String host, int port, InetAddress localHost, int localPort)
                  throws IOException, UnknownHostException {
                return delegate.createSocket(host, port, localHost, localPort);
              }

              @Override
              public Socket createSocket(
                  InetAddress address, int port, InetAddress localAddress, int localPort)
                  throws IOException {
                return delegate.createSocket(address, port, localAddress, localPort);
              }

              private void injectHostname(InetAddress address, String host) {
                try {
                  Field field = InetAddress.class.getDeclaredField("hostName");
                  field.setAccessible(true);
                  field.set(address, host);
                } catch (Exception ignored) {
                }
              }

              @Override
              public Socket createSocket(Socket s, String host, int port, boolean autoClose)
                  throws IOException {
                injectHostname(s.getInetAddress(), host);
                return delegate.createSocket(s, host, port, autoClose);
              }

              @Override
              public String[] getDefaultCipherSuites() {
                return delegate.getDefaultCipherSuites();
              }

              @Override
              public String[] getSupportedCipherSuites() {
                return delegate.getSupportedCipherSuites();
              }
            };
        sslSocket = (SSLSocket) factory.createSocket("195.248.169.76", 4445);
        sslSocket.setSoTimeout(20000);
        sslSocket.setUseClientMode(true);
        connected = true;
        Log.i(getClass().toString(), "Connected.");
        //                messages.getText().append("Connected.");
      }

      // Secure
      if (connected) {
        Log.i(getClass().toString(), "Securing...");
        //                messages.getText().append("Securing...");
        SSLSession session = sslSocket.getSession();
        boolean secured = session.isValid();
        if (secured) {
          Log.i(getClass().toString(), "Secured.");
          //                    messages.getText().append("Secured.");
        }
      }
    } catch (CertificateException e) {
      e.printStackTrace();
    } catch (UnrecoverableKeyException e) {
      e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } catch (KeyStoreException e) {
      e.printStackTrace();
    } catch (KeyManagementException e) {
      e.printStackTrace();
    } catch (UnknownHostException e) {
      e.printStackTrace();
    } catch (SocketException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }