From e34ebd2f0a6ab0a31c826f9736a15cf303f2eb3a Mon Sep 17 00:00:00 2001 From: Keith Irwin Date: Wed, 26 Apr 2017 22:30:11 -0400 Subject: [PATCH] Fixed socket factory not working on android 4.0.3. Can be reimplemented when fixing #4 --- .../us/keithirwin/tracman/LoginActivity.java | 30 ++-- .../keithirwin/tracman/TLSSocketFactory.java | 150 +++++++++--------- 2 files changed, 90 insertions(+), 90 deletions(-) diff --git a/app/src/main/java/us/keithirwin/tracman/LoginActivity.java b/app/src/main/java/us/keithirwin/tracman/LoginActivity.java index 2c415ee..6f85820 100644 --- a/app/src/main/java/us/keithirwin/tracman/LoginActivity.java +++ b/app/src/main/java/us/keithirwin/tracman/LoginActivity.java @@ -26,12 +26,12 @@ import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; -import java.security.KeyStore; -import java.util.Arrays; +//import java.security.KeyStore; +//import java.util.Arrays; -import javax.net.ssl.TrustManager; -import javax.net.ssl.TrustManagerFactory; -import javax.net.ssl.X509TrustManager; +//import javax.net.ssl.TrustManager; +//import javax.net.ssl.TrustManagerFactory; +//import javax.net.ssl.X509TrustManager; import okhttp3.Call; import okhttp3.FormBody; @@ -176,18 +176,18 @@ public class LoginActivity extends AppCompatActivity implements private void authenticateWithTracmanServer(final Request request) throws Exception { // Needed to support TLS 1.1 and 1.2 - TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( - TrustManagerFactory.getDefaultAlgorithm()); - trustManagerFactory.init((KeyStore) null); - TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); - if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { - throw new IllegalStateException("Unexpected default trust managers:" - + Arrays.toString(trustManagers)); - } - X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; +// TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( +// TrustManagerFactory.getDefaultAlgorithm()); +// trustManagerFactory.init((KeyStore) null); +// TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); +// if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { +// throw new IllegalStateException("Unexpected default trust managers:" +// + Arrays.toString(trustManagers)); +// } +// X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; OkHttpClient client = new OkHttpClient.Builder() - .sslSocketFactory(new TLSSocketFactory(), trustManager) +// .sslSocketFactory(new TLSSocketFactory(), trustManager) .build(); client.newCall(request).enqueue(new Callback() { diff --git a/app/src/main/java/us/keithirwin/tracman/TLSSocketFactory.java b/app/src/main/java/us/keithirwin/tracman/TLSSocketFactory.java index 6adc423..96f8015 100644 --- a/app/src/main/java/us/keithirwin/tracman/TLSSocketFactory.java +++ b/app/src/main/java/us/keithirwin/tracman/TLSSocketFactory.java @@ -1,75 +1,75 @@ -package us.keithirwin.tracman; - -import java.io.IOException; -import java.net.InetAddress; -import java.net.Socket; -import java.net.UnknownHostException; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocket; -import javax.net.ssl.SSLSocketFactory; - -/** - * @author fkrauthan - * From: https://blog.dev-area.net/2015/08/13/android-4-1-enable-tls-1-1-and-tls-1-2/ - */ -public class TLSSocketFactory extends SSLSocketFactory { - - private SSLSocketFactory internalSSLSocketFactory; - - public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException { - SSLContext context = SSLContext.getInstance("TLS"); - context.init(null, null, null); - internalSSLSocketFactory = context.getSocketFactory(); - } - - @Override - public String[] getDefaultCipherSuites() { - return internalSSLSocketFactory.getDefaultCipherSuites(); - } - - @Override - public String[] getSupportedCipherSuites() { - return internalSSLSocketFactory.getSupportedCipherSuites(); - } - - @Override - public Socket createSocket() throws IOException { - return enableTLSOnSocket(internalSSLSocketFactory.createSocket()); - } - - @Override - public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { - return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose)); - } - - @Override - public Socket createSocket(String host, int port) throws IOException, UnknownHostException { - return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port)); - } - - @Override - public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException { - return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort)); - } - - @Override - public Socket createSocket(InetAddress host, int port) throws IOException { - return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port)); - } - - @Override - public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { - return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort)); - } - - private Socket enableTLSOnSocket(Socket socket) { - if(socket != null && (socket instanceof SSLSocket)) { - ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"}); - } - return socket; - } - -} \ No newline at end of file +//package us.keithirwin.tracman; +// +//import java.io.IOException; +//import java.net.InetAddress; +//import java.net.Socket; +//import java.net.UnknownHostException; +//import java.security.KeyManagementException; +//import java.security.NoSuchAlgorithmException; +// +//import javax.net.ssl.SSLContext; +//import javax.net.ssl.SSLSocket; +//import javax.net.ssl.SSLSocketFactory; +// +///** +// * @author fkrauthan +// * From: https://blog.dev-area.net/2015/08/13/android-4-1-enable-tls-1-1-and-tls-1-2/ +// */ +//public class TLSSocketFactory extends SSLSocketFactory { +// +// private SSLSocketFactory internalSSLSocketFactory; +// +// public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException { +// SSLContext context = SSLContext.getInstance("TLS"); +// context.init(null, null, null); +// internalSSLSocketFactory = context.getSocketFactory(); +// } +// +// @Override +// public String[] getDefaultCipherSuites() { +// return internalSSLSocketFactory.getDefaultCipherSuites(); +// } +// +// @Override +// public String[] getSupportedCipherSuites() { +// return internalSSLSocketFactory.getSupportedCipherSuites(); +// } +// +// @Override +// public Socket createSocket() throws IOException { +// return enableTLSOnSocket(internalSSLSocketFactory.createSocket()); +// } +// +// @Override +// public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { +// return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose)); +// } +// +// @Override +// public Socket createSocket(String host, int port) throws IOException, UnknownHostException { +// return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port)); +// } +// +// @Override +// public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException { +// return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort)); +// } +// +// @Override +// public Socket createSocket(InetAddress host, int port) throws IOException { +// return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port)); +// } +// +// @Override +// public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { +// return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort)); +// } +// +// private Socket enableTLSOnSocket(Socket socket) { +// if(socket != null && (socket instanceof SSLSocket)) { +// ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"}); +// } +// return socket; +// } +// +//} \ No newline at end of file