martes, 10 de abril de 2012

Crear conexion https selfsigned en Android

Una de las tareas mas laboriosas de investigacion y desarrollo es precisamente crear una conexion https en Android con un certificado Selfsigned donde a menudo cuando persiste el problema veremos la excepcion "javax.net.ssl.SSLException: Not trusted server certificate". Hay mucha información en foros pero lo cierto es que no siempre funcionan para todos las soluciones que se plantean. A continuacion muestro como lo he hecho yo.

Este post esta basado en: Este otro post de stackoverflow

Primer paso:

Descargar BouncyCastleProvider

Segundo paso

Pegar el archivo en la carpeta donde se encuentra el JavaRuntime "Java\jre6\bin" o el compilador de Java . Lo que interesa es que se encuentre el archivo keytool.jar que viene por defecto con Java.

Tercer paso

Abrir tu navegador preferido (Chrome, IE, Firefox, etc) y pegar en la barra de direcciones la URL a la que quieres conectarte (https). Da click ante cualquier botón de Aceptar/Continuar que te aparezca. Ahora veras que en la barra de direcciones a la izquierda o derecha (dependiendo del navegador) hay un candado o cerrojo.

Dar un click sobre el candado y luego dar click en la opción Datos del Certificado/Mostrar mas detalles.

Aparecerá una ventana y dependiendo del OS (Windows, Mac, Linux, etc) tendremos que buscar la opción que nos permita guardar el certificado. En el caso de Windows este botón se encuentra en la pestaña "Detalles" y el botón dice "Copiar en archivo...".

La siguiente serie de pasos de puede resumir en "Siguiente... Siguiente" hasta que les de la opcion de elegir el lugar donde se va a guardar el certificado.
Lo vamos a guardar en el mismo lugar donde pusimos el archivo de BouncyCastleProvider y le pondremos el nombre "certificate.cer" al guardarlo.

Cuarto paso

Abrir la consola/terminal y colocarnos en la carpeta donde guardamos el certificate.cer y el BouncyCastleProvider. Luego escribir o copiar (cuidado de no copiar los Enter porque no funcionará) la siguiente instruccion:



Si todo salio bien en la carpeta donde hemos guardado los anteriores archivos deberia existir ahora un archivo llamado "mykeystore.bks".

Quinto paso

Copiar el archivo y pegarlo en la carpeta "res/raw" de su proyecto Android. Si la carpeta raw no existe hay que crearla.

Sexto paso

Ahora lo que tenemos que hacer es que en nuestra aplicación, al crear la conexión se deberá cargar el archivo que hemos creado. A continuación proporciono una clase simple que deberán copiar a su proyecto.



Septimo paso

El paso final es que en su actividad hagan uso de la clase que acabamos de crear con las siguientes instrucciones:



Esto ha funcionado para mi y espero funcione para ti. Otra forma es usando EasySSLSocketFactory y aqui hay un post muy bueno acerca de como hacerlo funcionar Ver el post!

No hay comentarios:

Publicar un comentario