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; }
public boolean isClosed() { return delegate.isClosed(); }
@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."); // } }
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(); } }