HttpURLConnection y HTTPS con certificado auto-firmado (Android)

TEORÍA

Vamos a trabajar con la figura del TrustManager y los pinned certificates de Java que deberías conocer antes de empezar a leer esta entrada.

La clase HttpURLConnection no puede crear una conexión HTTPS, es por ello que debemos usar su variante HttpsURLConnection (con S). Esta clase necesita una fábrica de Sockets SSL (SSLSocketFactory) para generar una instancia de sockets seguros que le permita crear y manejar la conexión HTTPS con el servidor.

Esta fábrica de sockets se le asigna al objeto (mediante el método «setSSLSocketFactory()» justo antes de realizar la conexión («connect()«).

PRÁCTICA

Sea cual sea el método que hayas elegido para crear el TrustManager, el fin será crear un objeto SSLSocketFactory y dárselo al HttpsURLConnection para que genere conexiones seguras en cada petición HTTPS.

Así pues tendríamos el siguiente código:

// Obtenemos nuestro TrustManagerFactory y creamos el socket factory
// TrustManagerFactory tmf;
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory sf = context.getSocketFactory();

// Crear la conexión HTTPS
URL url = new URL(fileUrl);
HttpsURLConnection urlConnection = (HttpsURLConnection)url.openConnection();
// Indicar el SSLSocketFactory antes de realizar la conexión
urlConnection.setSSLSocketFactory(sf);
urlConnection.connect();

 

Deja un comentario