domingo, 11 de julio de 2010

Cómo configurar un Trust Store en Java para conexiones sobre SSL

A continuación se presentan un conjunto de pasos que puede seguir para configurar un almacén de claves (keystore) como de "confianza" para una máquina virtual de Java. Esto resulta indispensable cuando deseamos que nuestra aplicación se conecte con servicios sobre SSL, por ejemplo: Servicios Web (sobre SSL - HTTPS), Servidores FTP (sobre SSL - FTPS) o Servidores SMTP (sobre SSL - SMTPS).

La Java VM no le permitirá conectarse con estos servicios sobre SSL a menos de que hayan sido configurados como confiables, para lo que deberá configurar el almacén de confianza (Trust Store).

  1. Obtener el certificado, para lo cual podrá correr el shell script retrieve_certificate.sh (mostrado al final de este artículo)
    $ ./retrieve_certificate.sh IP PUERTO > NOMBRE_CERT
  2. Crear el almacén de claves (keystore)
    $ keytool -import -keystore NOMBRE_KEYSTORE -file NOMBRE_CERT -alias NOMBRE_REF_CERT
  3. Chequear keystore
    $ keytool -list -keystore NOMBRE_KEYSTORE
  4. Agregar parámetros del keystore al Java VM. Por ejemplo, en tomcat:
    JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=NOMBRE_KEYSTORE -Djavax.net.ssl.trustStorePassword=CLAVE_KEYSTORE

A continuación el shell script retrieve_certificate.sh (extraído de aquí):

#!/bin/sh
#
# usage: retrieve-cert.sh remote.host.name [port]
#
REMHOST=$1
REMPORT=${2:-443}

echo |\
openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |\
#openssl x509 -connect ${REMHOST}:${REMPORT} 2>&1 |\
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

No hay comentarios:

Publicar un comentario