Skip to content

Instantly share code, notes, and snippets.

@gokhangirgin
Last active April 26, 2018 11:42
Show Gist options
  • Save gokhangirgin/ac8fdb8843a70a420982 to your computer and use it in GitHub Desktop.
Save gokhangirgin/ac8fdb8843a70a420982 to your computer and use it in GitHub Desktop.
OKHttp TLS 1.2 Android
public static OkHttpClient getTLSClient(){
OkHttpClient myOkHttpClient = new OkHttpClient();
if(TLS_1_2){
//tls 1.2
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_2)
.build();
myOkHttpClient.setConnectionSpecs(Collections.singletonList(spec));
}
else{
myOkHttpClient.setSslSocketFactory(new YOSSLSocketFactory());
}
myOkHttpClient.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
}
return myOkHttpClient;
}
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;
public class YOSSLSocketFactory extends SSLSocketFactory {
private SSLContext sContext;
private SSLSocketFactory socketFactory;
public YOSSLSocketFactory() {
try {
sContext = SSLContext.getInstance("TLSv1.2");
sContext.init(null, null, null);
socketFactory = sContext.getSocketFactory();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
}
@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose)
throws IOException {
SSLSocket ss = (SSLSocket) socketFactory.createSocket(s, host, port, autoClose);
ss.setEnabledProtocols(ss.getSupportedProtocols());
ss.setEnabledCipherSuites(ss.getSupportedCipherSuites());
return ss;
}
@Override
public String[] getDefaultCipherSuites() {
return socketFactory.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
return socketFactory.getSupportedCipherSuites();
}
@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
SSLSocket ss = (SSLSocket) socketFactory.createSocket(host, port);
ss.setEnabledProtocols(ss.getSupportedProtocols());
ss.setEnabledCipherSuites(ss.getSupportedCipherSuites());
return ss;
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
SSLSocket ss = (SSLSocket) socketFactory.createSocket(host, port);
ss.setEnabledProtocols(ss.getSupportedProtocols());
ss.setEnabledCipherSuites(ss.getSupportedCipherSuites());
return ss;
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort)
throws IOException, UnknownHostException {
SSLSocket ss = (SSLSocket) socketFactory.createSocket(host, port, localHost, localPort);
ss.setEnabledProtocols(ss.getSupportedProtocols());
ss.setEnabledCipherSuites(ss.getSupportedCipherSuites());
return ss;
}
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress,
int localPort) throws IOException {
SSLSocket ss = (SSLSocket) socketFactory.createSocket(address, port, localAddress, localPort);
ss.setEnabledProtocols(ss.getSupportedProtocols());
ss.setEnabledCipherSuites(ss.getSupportedCipherSuites());
return ss;
}
}
@IgorGanapolsky
Copy link

Would this avoid the error:

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xaec39a00: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:770 0xaba4dc4d:0x00000000)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment