¿Cómo implementar SSL en Apache Tomcat?

Una guía paso a paso para configurar el certificado SSL/TLS en el servidor Tomcat.

Una de las tareas esenciales para proteger Tomcat es configurar el certificado SSL, de modo que se pueda acceder a la aplicación web a través de HTTPS.

Hay muchas maneras de lograr esto.

  • Puede terminar SSL en un balanceador de carga
  • Implementar SSL a nivel de CDN
  • Use servidores web como Apache, Nginx, etc. al frente e implemente SSL allí

Sin embargo, si no está utilizando ninguno de los anteriores o lo está utilizando como interfaz o necesita implementar SSL directamente en Tomcat, lo siguiente lo ayudará.

En este artículo, haremos lo siguiente.

  • Generar CSR (Solicitud de firma de certificado)
  • Importar certificado en un archivo de almacén de claves
  • Habilitar SSL en Tomcat
  • Configurar el protocolo TLS
  • Cambie Tomcat para escuchar en el puerto 443
  • Pruebe Tomcat para la vulnerabilidad SSL

Empecemos…

Preparación para el certificado SSL/TLS

El primer paso sería generar un CSR y conseguir que lo firme el Autoridad certificada. Usaremos la utilidad keytool para administrar los certificados.

  • Iniciar sesión en el servidor Tomcat
  • Vaya a la ruta de instalación de Tomcat
  • Crea una carpeta llamada ssl
  • Ejecute el comando para crear un almacén de claves
keytool -genkey -alias domainname -keyalg RSA -keysize 2048 -keystore filename.jks

Hay dos variables en los comandos anteriores que es posible que desee cambiar.

  • Alias: es mejor mantenerlo significativo para que en el futuro pueda reconocerlo rápidamente. Prefiero mantenerlo como un nombre de dominio.
  • Nombre de archivo: nuevamente, es bueno mantener el nombre de dominio.
  • Ex:

    [[email protected] ssl]# keytool -genkey -alias bloggerflare -keyalg RSA -keysize 2048 -keystore bloggerflare.jks
    Enter keystore password:
    Re-enter new password:
    What is your first and last name?
    [Unknown]: bloggerflare.com
    What is the name of your organizational unit?
    [Unknown]: Blogging
    What is the name of your organization?
    [Unknown]: Geek Flare
    What is the name of your City or Locality?
    [Unknown]:
    What is the name of your State or Province?
    [Unknown]:
    What is the two-letter country code for this unit?
    [Unknown]:
    Is CN=bloggerflare.com, OU=Blogging, O=Geek Flare, L=Unknown, ST=Unknown, C=Unknown correct?
    [no]: yes
    
    Enter key password for <bloggerflare>
    (RETURN if same as keystore password):
    
    [[email protected] ssl]#

    Preste atención a la pregunta de nombre y apellido. Esto es un poco engañoso, creo. No es su nombre sino el nombre de dominio lo que desea proteger.

    Una vez que proporcione toda la información, se creará un archivo de almacén de claves en un directorio de trabajo actual.

    Lo siguiente sería generar una nueva CSR con el almacén de claves recién creado con el siguiente comando.

    keytool -certreq -alias bloggerflare -keyalg RSA -file bloggerflare.csr -keystore bloggerflare.jks

    Esto creará una CSR que deberá enviar a la autoridad de certificación para que la firme. Si está jugando, entonces puede considerar usar un proveedor de certificados GRATUITO; de lo contrario, elija uno premium.

    Obtuve el certificado firmado y procederé a importarlo al almacén de claves con el siguiente comando.

    • El proveedor otorga el certificado raíz de importación
    keytool -importcert -alias root -file root -keystore bloggerflare.jks
    • Certificado intermedio de importación
    keytool -importcert -alias intermediate -file intermediate -keystore bloggerflare.jks

    Nota: sin importar raíz e intermedio, no podrá importar el certificado de dominio al almacén de claves. Si tiene más de un intermedio, debe importarlos todos.

    • Importar certificado de dominio
    keytool -importcert -file bloggerflare.cer -keystore bloggerflare.jks -alias bloggerflare

    y obtendrá una confirmación de que se instaló.

    La respuesta del certificado se instaló en el almacén de claves

    Genial, entonces el almacén de claves de certificados está listo ahora. Pasemos al siguiente paso.

    Si es nuevo en SSL y está interesado en saber más, inscríbase en este curso en línea: Operaciones SSL/TLS.

    Habilitar SSL en Tomcat

    Suponiendo que todavía está conectado al servidor Tomcat, vaya a la carpeta conf

    • Realice una copia de seguridad del archivo server.xml
    • Vaya a la sección
    SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
    • No olvide cambiar el nombre del archivo del almacén de claves y la contraseña con los suyos.
    • Reinicie Tomcat y debería ver que se puede acceder a Tomcat a través de HTTPS

    ¡Dulce!

    Puerto HTTPS estándar

    ¿Por qué?

    Bueno, si observa la captura de pantalla anterior, estoy accediendo a Tomcat a través de 8080 con https, que no es estándar y algunas razones más.

    • No desea pedirles a los usuarios que usen un puerto personalizado
    • El navegador dará una advertencia cuando el certificado se emita en el nombre de dominio sin el puerto

    Entonces, la idea es hacer que Tomcat escuche en el puerto 443 para que sea accesible a través de https:// sin el número de puerto.

    Para hacerlo, edite server.xml con su editor favorito

    • Vaya a
    • Cambiar puerto de 8080 a 443
    • Debe tener un aspecto como este
    <Connector port="443" protocol="HTTP/1.1"
    connectionTimeout="20000"
    SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
    redirectPort="8443" />
    • Reinicie Tomcat y acceda a su aplicación con https sin ningún número de puerto

    ¡Impresionante, es un éxito!

    Prueba de vulnerabilidad SSL/TLS

    Finalmente, realizaremos una prueba para asegurarnos de que no sea vulnerable a las amenazas en línea.

    Hay muchas herramientas en línea que discutí aquí, y aquí usaré SSL Labs.

    Y es VERDE: calificación A.

    Sin embargo, siempre es una buena idea desplazarse hacia abajo en el informe y ver si encuentra alguna vulnerabilidad y solucionarla.

    Así que eso fue todo por hoy.

    Espero que esto le ayude a conocer el procedimiento para proteger Tomcat con un certificado SSL/TLS. Si está interesado en aprender más, le recomiendo este curso.