Certificados SSL
Para las aplicaciones Java, la verificación de servidores seguros se realiza a través de un almacén de claves que contiene certificados de confianza.
Utiliza OpenSSL para conectarte al servidor y obtener el certificado:
openssl s_client -servername subdomain.domain.es -connect subdomain.domain.es:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >/tmp/certificate.pemEste comando se conecta al servidor en el puerto 443 y guarda el certificado en un archivo llamado certificate.pem dentro del directorio temporal /tmp.
Importar el Certificado al Almacén de Claves de Java, una vez obtenido el certificado, utiliza keytool para importarlo al almacén de claves de Java:
/opt/jdkx.x.x/bin/keytool -import -trustcacerts -file /tmp/certificate.pem -keystore /opt/jdkx.x.x/jre/lib/security/cacerts -alias subdomain.domain.esAlgunos parámetros útiles:
-fileespecifica el archivo del certificado a importar.-keystoreapunta al almacén de claves (cacerts por defecto).-aliasproporciona un nombre único para identificar el certificado.
Recuerda que la contraseña por defecto para el almacén de claves suele ser changeit.
Automatización de la importación
Section titled “Automatización de la importación”El siguiente script permite automatizar la importación de certificados SSL en Java:
#!/bin/sh
# Establece la variable de entorno JAVA_HOMEjava_executable=$(which java)export JAVA_HOME=$(dirname $(dirname $java_executable))
if [ -z "$1" ]; then echo "Error: Se requiere el dominio del servidor como argumento" exit 1fi
# Eliminamos antiguos certificadosif test -e /tmp/certificate.pem; then rm /tmp/certificate.pemfi
# Obtiene el nombre del servidor del primer parámetroserver_name=$1
# Asigna el mismo valor a la variable aliasalias=$server_name
# Obtiene el certificado del servidor y lo guarda en un archivo temporalecho "Intentando conectarse al servidor remoto $1"openssl s_client -servername "$server_name" -connect "$server_name":443 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >/tmp/certificate.pem
# Comprueba si el archivo certificate.pem existeif test -e /tmp/certificate.pem; then # Muestra un mensaje si el archivo existe echo "Obtenido con éxito el certificado en /tmp/certificate.pem"else # Muestra un mensaje si el archivo no existe echo "Error: No se ha podido obtener el certificado para el dominio $server_name" exit 1fi
echo "Instalación de Java actual en $JAVA_HOME"
# Importa el certificado al almacén de claves de Java"$JAVA_HOME/bin/keytool" -import -trustcacerts -file /tmp/certificate.pem -keystore "$JAVA_HOME/jre/lib/security/cacerts" -alias "$alias" -storepass changeit -nopromptEjemplo de ejecución:
./import_ssl_certificate.sh pokeapi.coDesde el PATH
Section titled “Desde el PATH”Para ejecutar el script desde cualquier lugar del sistema, sigue estos pasos:
-
Crea un directorio
binen tu carpeta de usuario:Terminal window mkdir -p $HOME/bin -
Añade el directorio
bina tu variablePATH:Terminal window echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrcsource ~/.bashrc -
Crea un enlace simbólico para el script:
Terminal window ln -s /ruta/a/import_ssl_certificate.sh $HOME/bin/import_ssl_certificate
De esta forma, podrás ejecutar el script con solo escribir import_ssl_certificate en tu terminal, desde cualquier ubicación.