CodekoLib: Ayuda para conexiones SSL desde Java
22/04/2010 || Artículos, Java, Software LibreEn este primer artículo sobre el recientemente liberado CodekoLib vamos a tratar una clase muy simple pero que puede ahorrar muchos quebraderos de cabeza. La clase es InstaladorCertificados.
Si alguna vez has tenido que realizar con Java alguna conexión https habrás descubierto que es una tarea complicada y tediosa. La idea básica es que al igual que cuando accedes con tu navegador a una dirección https tienes que aceptar e instalar el certificado de la web, cuando accedes desde Java tienes que proceder de la misma manera.
La clase InstaladorCertificados te ahorra ese trabajo realizando la descarga e instalación del certificado de una forma muy simple. Simplemente hay que realizar una llamada al método instalar() antes de realizar las conexiones. Así para acceder a la url https://midominioseguro.com simplemente habría que hacer la siguiente llamada:
InstaladorCertificados.instalar("https://midominioseguro.com");
Con esta simple llamada ya tendremos el certificado instalado y podremos trabajar con normalidad. Por supuesto podemos pasar como parámetro una URL en vez de una cadena de texto.
Si no sabes si la url es de una conexión https puedes realizar la llamada a instalar() sin preocuparte ya que la clase se encarga de verificar que la url es de una conexión https antes de realizar cualquier operación.
La clase se encarga de crear un KeyStore temporal donde almacenar los certificados y asignarlo como el KeyStore en uso. Además la clase te permite definir tu propio KeyStore por si deseas mantenerlo entre ejecuciones o usarlo para otras aplicaciones. Para usar un KeyStore propio se utiliza la clase CodekoKeyStore de la siguiente forma:
//El archivo donde se almacenan los certificados
File ksFile=new File("mi_archivo_keystore.ks");
//La clave del KeyStore
String ksClave="la_clave_de_mi_KeyStore";
//Creamos el archivo keystore
CodekoKeyStore ks=new CodekoKeyStore(ksFile,ksClave );
//Lo asignamos para que Java utilice este KeyStore
//a la hora de buscar certificados instalados
ks.asignarComoSSLKeyStore();
//Opcionalmente si vamos a instalar nuevos certificados
//le decimos a InstaladorCertificados que use ese KeyStore
InstaladorCertificados.setKeyStore(ks);
Por último la clase InstaladorCertificados provee de un método para evitar los errores cuando accedemos a urls https con el certificado mal creado debido a que este es para un dominio diferente al que se está accediendo (por ejemplo accedemos por localhost y el certificado es para midominio.com). Aunque esta práctica no es recomendable puede haber momentos en los que no tengamos otra opción. Para evitar errores accediendo a estas urls simplemente debemos usar la función deshabilitarHostNameVerification():
//Deshabilitamos el control de nombre de dominios en los certificados
InstaladorCertificados.deshabilitarHostNameVerification();
//Para habilitarla de nuevo simplemente hay llamar
//a la función con el parámetro false
InstaladorCertificados.deshabilitarHostNameVerification(false);
Con este simple clase podremos realizar de forma cómoda todas las operaciones con urls seguras sin tener que complicarnos la vida con los certificados SSL.