Obtención e instalación de certificados en clientes J2EE

RECU-0433 (Recurso Referencia)

Descripción

Los servicios publicados por GUIA son consumidos siempre a través de protocolo seguro. Para asegurar el funcionamiento correcto de las aplicaciones que hagan uso de estos servicios será necesario obtener e instalar estos certificados.

Obtención

Con un navegador accedemos al servidor al que deba conectarse la aplicación, por ejemplo a los web services de directorio del entorno de Versiones Estables: https://guia.ves.i-administracion.junta-andalucia.es/servicio/wsdirectorio/directorio

  • Nota 1: Los certificados son diferentes dependiendo del entorno, con lo cual para otro entorno habrá que acceder a una URL diferente. Se recomienda acceder al recurso de Entornos para obtener las direcciones correctas.
  • Nota 2: El siguiente ejemplo está realizado utilizando como navegador Mozilla Firefox.

Desplegamos la opción “Entiendo los riesgos” y pulsamos sobre “Añadir excepción”

A continuación obtenemos el certificado, podemos verlo para verificarlo y finalmente pulsamos “Confirmar excepción de seguridad”.

Tras realizar estos pasos hemos obtenido el certificado y está instalado en el repositorio de certificados del navegador, con lo cual el mismo puede acceder al servicio web de directorio, pero no está accesible para el resto de aplicaciones y por tanto aún no tienen acceso. El navegador completará el acceso a la URL del Web Service y deberá aparecer la siguiente pantalla, señal de que el acceso ha finalizado correctamente.

Como último paso de la obtención del certificado vamos a extraerlo del navegador y lo almacenamos en un fichero. Para ello accedemos al menú del navegador ? Herramientas ? Opciones ? Avanzado ? Ver Certificados

En la pestaña “Servidores” localizamos el certificado de servidor que obtuvimos anteriormente y lo exportamos a fichero, llamémoslo cert-sadesi.pem a modo de ejemplo.

Instalación del certificado en la JVM

Para instalar el certificado utilizamos la podemos seguir los siguientes pasos:

  • Verificar si el certificado se encuentra ya en la lista de confiables. El siguiente comando muestra la lista de certificados en los que se confía:
keytool  -v  -list  -keystore  almacen
  • Si el certificado no se encuentra en el almacén, importarlo:
keytool -import -keystore almacen -alias sadesiCertificadoServidor -file cert-sadesi.pem  -storepass myStorePassword
  • La herramienta preguntará si confiamos en el certificado, a lo que responderemos que sí.
> Confiar en este certificado? [no]:  si

Por defecto el almacén de certificados se encuentra en $JRE_HOME/lib/security/cacerts pero si el certificado fuera instalado en otra localización, como en el paso anterior (almacen) habría que establecer su localización y password como propiedades de la JVM en la que se ejecute el proceso cliente. Esto puede hacerse:

  • Estableciendo esta propiedades por código (en el siguiente ejemplo se leen esta propiedades de un fichero de configuración pero podría utilizarse otro método)
String  wsdlLocation=this.properties.getProperty("guia_ws_dir_wsdl_location");
URL urlWSDL;
try {
    urlWSDL = new URL(wsdlLocation);
} catch (MalformedURLException e) {
    throw new MaG4JException(e.getMessage(), e);
}
String truststore_location=this.properties.getProperty("truststore_location");
String truststore_password=this.properties.getProperty("truststore_password");
if( urlWSDL.getProtocol().toUpperCase().equals("HTTPS") && truststore_location!=null && !"".equals(truststore_location) ){
    System.setProperty("javax.net.ssl.trustStore", truststore_location);
    System.setProperty("javax.net.ssl.trustStorePassword", truststore_password);
}
  • Arrancando el proceso java con la opciones -Djavax.net.ssl.trustStore=almacen -Djavax.net.ssl.trustStorePassword=myStorePassword