1 package de.dhbwloe.campusapp.wifi;
3 import android.util.Log;
5 import java.io.IOException;
6 import java.net.InetAddress;
7 import java.net.Socket;
8 import java.net.UnknownHostException;
9 import java.security.KeyManagementException;
10 import java.security.NoSuchAlgorithmException;
11 import java.security.SecureRandom;
12 import java.security.cert.CertificateException;
13 import java.security.cert.X509Certificate;
15 import javax.net.ssl.SSLContext;
16 import javax.net.ssl.SSLSocket;
17 import javax.net.ssl.SSLSocketFactory;
18 import javax.net.ssl.TrustManager;
20 public class SecureLoginSocketFactory extends SSLSocketFactory {
21 private static final String ENABLED_PROTOCOLS[] = {
22 "TLSv1", "TLSv1.1", "TLSv1.2"
24 private static final String ENABLED_CIPHERS[] = {
25 "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
26 "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
27 "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
28 "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
29 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
30 "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
31 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
32 "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
33 "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
34 "TLS_RSA_WITH_AES_128_CBC_SHA",
35 "TLS_RSA_WITH_AES_256_CBC_SHA",
36 "SSL_RSA_WITH_3DES_EDE_CBC_SHA",
37 "SSL_RSA_WITH_RC4_128_SHA",
38 "SSL_RSA_WITH_RC4_128_MD5",
41 private SSLSocketFactory socketFactory;
42 public SSLContext context;
44 public SecureLoginSocketFactory(SSLContext context, SSLSocketFactory innerSslSocketFactory) {
46 this.context = context;
47 this.socketFactory = innerSslSocketFactory;
51 public String[] getDefaultCipherSuites() {
52 return socketFactory.getDefaultCipherSuites();
56 public String[] getSupportedCipherSuites() {
57 return socketFactory.getSupportedCipherSuites();
61 public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
62 return enableTLSOnSocket(socketFactory.createSocket(s, host, port, autoClose));
66 public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
67 return enableTLSOnSocket(socketFactory.createSocket(host, port));
71 public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
72 return enableTLSOnSocket(socketFactory.createSocket(host, port, localHost, localPort));
76 public Socket createSocket(InetAddress host, int port) throws IOException {
77 return enableTLSOnSocket(socketFactory.createSocket(host, port));
81 public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
82 return enableTLSOnSocket(socketFactory.createSocket(address, port, localAddress, localPort));
85 private Socket enableTLSOnSocket(Socket socket) {
86 if(socket != null && (socket instanceof SSLSocket)) {
87 SSLSocket sslSocket = ((SSLSocket) socket);
89 sslSocket.setEnabledCipherSuites(ENABLED_CIPHERS);
90 sslSocket.setEnabledProtocols(ENABLED_PROTOCOLS);