Fixed socket factory not working on android 4.0.3. Can be reimplemented when fixing #4
parent
68ac5a17b0
commit
e34ebd2f0a
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
//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;
|
||||
// }
|
||||
//
|
||||
//}
|
Loading…
Reference in New Issue