bg-tutorials

Cómo instalar un certificado SSL en Tomcat

En este tutorial, aprenderá cómo instalar un certificado SSL en Apache Tomcat utilizando la utilidad Java keytool, y luego configurará el conector HTTPS en server.xml. Si aún no ha generado su CSR, la primera sección le muestra cómo hacerlo.

También grabamos un video que le guía a través de todo el proceso. Puede ver el video, leer las instrucciones, o hacer ambas cosas. Puede ver el video a continuación.

Generar un código CSR para Tomcat

CSR significa Certificate Signing Request (solicitud de firma de certificado), un bloque de texto que contiene los datos actuales de su dominio y organización. Todo comprador de un certificado SSL comercial debe enviar un CSR a la Autoridad de Certificación (el proveedor de SSL) para superar la validación y recibir el certificado. Si el CSR contiene datos incorrectos, la CA no lo firmará.

En Tomcat, el CSR se crea con keytool a partir de un almacén de claves (keystore) Java, y ese mismo keystore contiene la clave privada que reutilizará durante la instalación. Tiene dos opciones:

Importante: lleve un registro del archivo keystore y del alias que usó al generar el CSR. Más adelante importará su certificado firmado de nuevo a ese mismo alias, porque ahí es donde reside la clave privada correspondiente.

Después de que la Autoridad de Certificación valide su solicitud y le envíe los archivos SSL, continúe con la instalación a continuación.

Instalar un certificado SSL en Tomcat

Una instalación en Tomcat tiene dos etapas: primero importa la cadena de certificados y su certificado firmado al keystore que ya contiene su clave privada, y luego configura el conector HTTPS en server.xml para que use ese keystore.

Paso 1: Prepare los archivos de su certificado SSL

Su Autoridad de Certificación envía los archivos por correo electrónico a la dirección que usted proporcionó, normalmente como un archivo ZIP. Extráigalo. Según la CA, los archivos llegan en uno de estos dos formatos:

  • PKCS#7: un único archivo .p7b (o .cer) que ya incluye su certificado junto con los certificados raíz e intermedios.
  • PEM: archivos separados, normalmente un .crt para su certificado de servidor más archivos individuales root.crt e intermediate.crt.

Suba los archivos extraídos al servidor, al mismo directorio que el keystore desde el que generó su CSR (referido a continuación como example.jks). Identifique su formato y siga las instrucciones correspondientes.

Paso 2: Importe el certificado a su keystore

Formato PKCS#7. Dado que un archivo .p7b ya contiene la cadena completa, un solo comando importa todo a la vez, en su alias de clave privada existente:

keytool -import -trustcacerts -alias ssldragon -keystore example.jks -file example.p7b

Reemplace ssldragon con su propio alias y example con los nombres de sus archivos. El alias debe ser aquel que ya contiene su clave privada (el alias del paso del CSR). Cuando vea el mensaje Certificate reply was installed in keystore, la importación se realizó correctamente. Verifique el contenido del keystore con:

keytool -list -v -keystore example.jks

Busque una entrada cuyo tipo sea PrivateKeyEntry con una longitud de cadena de certificados mayor que 1. Esto confirma que el certificado firmado ahora está vinculado a su clave privada.

Formato PEM. Importe los certificados por separado, en el orden de la cadena: primero la raíz, luego cualquier certificado intermedio, y su certificado de dominio al final. Importar la cadena primero permite que keytool construya una ruta de confianza completa antes de adjuntar la respuesta a su clave. Importe el certificado raíz:

keytool -import -trustcacerts -alias root -keystore example.jks -file root.crt

Luego importe el certificado intermedio:

keytool -import -trustcacerts -alias intermediate -keystore example.jks -file intermediate.crt

Si su CA proporciona varios certificados intermedios, importe cada uno bajo su propio alias de confianza, siguiendo el orden en que se firman entre sí (desde la raíz hacia abajo, hasta su certificado de dominio). Por ejemplo, un certificado Sectigo PositiveSSL viene con más de un intermedio, así que impórtelos en secuencia antes del certificado de dominio.

Finalmente, importe su certificado principal (el emitido para su dominio) en el alias de clave privada existente, el mismo alias que usó al generar el CSR:

keytool -import -trustcacerts -alias ssldragon -keystore example.jks -file example.crt

Aquí, ssldragon debe ser su alias de clave privada existente. Debido a que ese alias ya tiene una clave, keytool trata esta importación como una respuesta de certificado y vincula el certificado firmado a la clave. Este es el paso que hace que HTTPS funcione.

Error crítico a evitar: no importe el certificado firmado bajo un alias completamente nuevo. Si el alias no tiene una clave privada existente, keytool almacena el certificado como una entrada de confianza independiente sin clave adjunta, y TLS fallará. Si no está seguro de qué alias contiene su clave, ejecute keytool -list -v -keystore example.jks y use el alias cuyo tipo sea PrivateKeyEntry.

Paso 3: Configure el conector HTTPS en server.xml

Con el certificado en su keystore, dirija el conector HTTPS de Tomcat hacia él. El conector se define en server.xml, ubicado en la carpeta conf de su instalación de Tomcat (por ejemplo $CATALINA_HOME/conf/server.xml). Abra el archivo en un editor de texto.

En las versiones actuales de Tomcat (9, 10 y 11), la forma recomendada anida un elemento SSLHostConfig, que a su vez contiene un elemento Certificate que hace referencia a su keystore. Agregue o actualice el conector seguro para que quede así:

<Connector
    port="443"
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150"
    SSLEnabled="true"
    scheme="https"
    secure="true">
  <SSLHostConfig>
    <Certificate
        certificateKeystoreFile="/your_path/example.jks"
        certificateKeystorePassword="your_keystore_password"
        certificateKeystoreType="JKS"
        certificateKeyAlias="ssldragon"
        type="RSA" />
  </SSLHostConfig>
</Connector>
  • certificateKeystoreFile: la ruta completa a su archivo keystore.
  • certificateKeystorePassword: la contraseña del keystore.
  • certificateKeystoreType: JKS para un keystore .jks, o PKCS12 para un keystore .p12 / .pfx.
  • certificateKeyAlias: el alias que contiene su clave privada y certificado firmado (aquí, ssldragon). Esto le indica a Tomcat qué entrada usar cuando el keystore contiene más de una.

Nota: el puerto 443 es el puerto HTTPS estándar utilizado arriba; los ejemplos propios de Tomcat usan por defecto el 8443, así que use el que espere su entorno. Si esta es su primera configuración HTTPS, el conector seguro puede estar comentado en server.xml. Elimine los marcadores de comentario que lo rodean para activar el conector, y asegúrese de que ningún otro conector ya esté vinculado al mismo puerto.

Forma antigua (Tomcat más antiguo). Las guías más antiguas colocan los datos del keystore directamente en el conector como atributos keystoreFile y keystorePass. Ese estilo ha sido reemplazado por los elementos SSLHostConfig y Certificate mostrados arriba, que es la forma a usar en las versiones de Tomcat compatibles.

Paso 4: Guarde server.xml y reinicie Tomcat

Guarde server.xml, luego reinicie Tomcat para que recargue la configuración. En Linux, use los scripts incluidos:

$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh

Si Tomcat se ejecuta como un servicio, reiníquelo a través de su administrador de servicios (por ejemplo systemctl restart tomcat en Linux, o el panel de Servicios en Windows). Felicidades, su certificado SSL ahora está instalado en su servidor Tomcat.

Pruebe su instalación SSL en Tomcat

Después de instalar el certificado, pequeños errores pueden pasar desapercibidos y afectar la forma en que los navegadores tratan su sitio. Adquiera el hábito de verificar la instalación. Ejecute nuestro SSL Checker para un escaneo instantáneo que revela problemas como un certificado intermedio faltante o una cadena no confiable.

Preguntas frecuentes

¿Por qué mi certificado SSL de Tomcat no funciona después de importarlo?

La causa habitual es importar el certificado firmado bajo un alias nuevo en lugar del alias que ya contiene su clave privada. keytool entonces lo almacena como una entrada de certificado de confianza sin clave, por lo que Tomcat no puede completar el intercambio TLS. Vuelva a importar la respuesta firmada en el alias de clave privada existente (el de su CSR). Confirme que funcionó ejecutando keytool -list -v -keystore example.jks y comprobando que el alias aparece como PrivateKeyEntry con una cadena de más de un certificado.

¿Debo importar primero la cadena de certificados o mi certificado de dominio?

Importe primero la cadena. Agregue el certificado raíz y cualquier certificado intermedio como entradas de confianza, en orden, y luego importe su certificado de dominio en el alias de clave privada al final. Esto permite que keytool construya una ruta de confianza completa antes de adjuntar la respuesta a su clave. Con un archivo PKCS#7 (.p7b) la cadena ya viene incluida, por lo que una sola importación lo resuelve todo.

¿Dónde está el archivo de configuración SSL de Tomcat?

El conector HTTPS se define en server.xml, en el directorio conf de su instalación de Tomcat (por ejemplo $CATALINA_HOME/conf/server.xml). En las versiones actuales de Tomcat, el keystore se referencia mediante un elemento anidado SSLHostConfig y Certificate en lugar de directamente en el conector.

¿Puedo usar un keystore PKCS12 en lugar de JKS en Tomcat?

Sí. Tomcat admite ambos. Configure certificateKeystoreType como PKCS12 para un keystore .p12 o .pfx, o JKS para un keystore .jks, y apunte certificateKeystoreFile al archivo correspondiente. PKCS12 es el formato de keystore estándar y portable, por lo que es una buena opción predeterminada para keystores nuevos.

¿Qué puerto usa Tomcat para HTTPS?

La configuración de ejemplo de Tomcat usa el puerto 8443 para el conector seguro. Para servir HTTPS en el puerto estándar que los navegadores usan por defecto, configure el port del conector como 443 y asegúrese de que ningún otro conector o servicio ya lo esté usando.

¿Cómo reinicio Tomcat después de cambiar la configuración SSL?

Ejecute los scripts incluidos $CATALINA_HOME/bin/shutdown.sh seguido de $CATALINA_HOME/bin/startup.sh, o reinicie el servicio Tomcat a través de su administrador de servicios (por ejemplo systemctl restart tomcat en Linux, o el panel de Servicios en Windows). Se requiere un reinicio para que los cambios en server.xml surtan efecto.

Ahorre un 10% en certificados SSL al realizar su pedido hoy mismo.

Emisión rápida, cifrado potente, 99,99% de confianza del navegador, asistencia dedicada y garantía de devolución del dinero en 25 días. Código del cupón: SAVE10

Una imagen detallada de un dragón en vuelo
Escrito por

Redactor de contenidos experimentado especializado en Certificados SSL. Transformar temas complejos de ciberseguridad en contenido claro y atractivo. Contribuir a mejorar la seguridad digital a través de narrativas impactantes.