Fixed socket factory not working on android 4.0.3. Can be reimplemented when fixing #4

master
Keith Irwin 2017-04-26 22:30:11 -04:00
parent 68ac5a17b0
commit e34ebd2f0a
No known key found for this signature in database
GPG Key ID: 378933C743E2BBC0
2 changed files with 90 additions and 90 deletions

View File

@ -26,12 +26,12 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.IOException; import java.io.IOException;
import java.security.KeyStore; //import java.security.KeyStore;
import java.util.Arrays; //import java.util.Arrays;
import javax.net.ssl.TrustManager; //import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory; //import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager; //import javax.net.ssl.X509TrustManager;
import okhttp3.Call; import okhttp3.Call;
import okhttp3.FormBody; import okhttp3.FormBody;
@ -176,18 +176,18 @@ public class LoginActivity extends AppCompatActivity implements
private void authenticateWithTracmanServer(final Request request) throws Exception { private void authenticateWithTracmanServer(final Request request) throws Exception {
// Needed to support TLS 1.1 and 1.2 // Needed to support TLS 1.1 and 1.2
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( // TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm()); // TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null); // trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); // TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { // if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
throw new IllegalStateException("Unexpected default trust managers:" // throw new IllegalStateException("Unexpected default trust managers:"
+ Arrays.toString(trustManagers)); // + Arrays.toString(trustManagers));
} // }
X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; // X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
OkHttpClient client = new OkHttpClient.Builder() OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(new TLSSocketFactory(), trustManager) // .sslSocketFactory(new TLSSocketFactory(), trustManager)
.build(); .build();
client.newCall(request).enqueue(new Callback() { client.newCall(request).enqueue(new Callback() {

View File

@ -1,75 +1,75 @@
package us.keithirwin.tracman; //package us.keithirwin.tracman;
//
import java.io.IOException; //import java.io.IOException;
import java.net.InetAddress; //import java.net.InetAddress;
import java.net.Socket; //import java.net.Socket;
import java.net.UnknownHostException; //import java.net.UnknownHostException;
import java.security.KeyManagementException; //import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException; //import java.security.NoSuchAlgorithmException;
//
import javax.net.ssl.SSLContext; //import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket; //import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory; //import javax.net.ssl.SSLSocketFactory;
//
/** ///**
* @author fkrauthan // * @author fkrauthan
* From: https://blog.dev-area.net/2015/08/13/android-4-1-enable-tls-1-1-and-tls-1-2/ // * 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 { //public class TLSSocketFactory extends SSLSocketFactory {
//
private SSLSocketFactory internalSSLSocketFactory; // private SSLSocketFactory internalSSLSocketFactory;
//
public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException { // public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException {
SSLContext context = SSLContext.getInstance("TLS"); // SSLContext context = SSLContext.getInstance("TLS");
context.init(null, null, null); // context.init(null, null, null);
internalSSLSocketFactory = context.getSocketFactory(); // internalSSLSocketFactory = context.getSocketFactory();
} // }
//
@Override // @Override
public String[] getDefaultCipherSuites() { // public String[] getDefaultCipherSuites() {
return internalSSLSocketFactory.getDefaultCipherSuites(); // return internalSSLSocketFactory.getDefaultCipherSuites();
} // }
//
@Override // @Override
public String[] getSupportedCipherSuites() { // public String[] getSupportedCipherSuites() {
return internalSSLSocketFactory.getSupportedCipherSuites(); // return internalSSLSocketFactory.getSupportedCipherSuites();
} // }
//
@Override // @Override
public Socket createSocket() throws IOException { // public Socket createSocket() throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket()); // return enableTLSOnSocket(internalSSLSocketFactory.createSocket());
} // }
//
@Override // @Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { // public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose)); // return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose));
} // }
//
@Override // @Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException { // public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port)); // return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
} // }
//
@Override // @Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException { // public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort)); // return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort));
} // }
//
@Override // @Override
public Socket createSocket(InetAddress host, int port) throws IOException { // public Socket createSocket(InetAddress host, int port) throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port)); // return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
} // }
//
@Override // @Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { // public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort)); // return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort));
} // }
//
private Socket enableTLSOnSocket(Socket socket) { // private Socket enableTLSOnSocket(Socket socket) {
if(socket != null && (socket instanceof SSLSocket)) { // if(socket != null && (socket instanceof SSLSocket)) {
((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"}); // ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
} // }
return socket; // return socket;
} // }
//
} //}