En este tutorial, aprenderás cómo instalar un certificado SSL en Apache Tomcat usando la utilidad Java keytool, y luego configurarás el conector HTTPS en server.xml. Si aún no has generado tu CSR, la primera sección te muestra cómo hacerlo.
También grabamos un video que te guía a través de todo el proceso. Puedes ver el video, leer las instrucciones, o hacer ambas cosas. Puedes 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 tu dominio y organización. Todo comprador de un certificado SSL comercial debe enviar un CSR a la Autoridad de Certificación (el proveedor SSL) para pasar 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ás durante la instalación. Tienes dos opciones:
- Usa nuestro Generador de CSR para crear el CSR automáticamente.
- Sigue nuestro tutorial paso a paso sobre cómo generar un CSR en Tomcat.
Importante: lleva un registro del archivo keystore y el alias que usaste al generar el CSR. Más adelante importarás tu certificado firmado de vuelta a ese mismo alias, porque ahí es donde reside la clave privada correspondiente.
Después de que la Autoridad de Certificación valide tu solicitud y te envíe los archivos SSL, continúa con la instalación a continuación.
Instalar un certificado SSL en Tomcat
Una instalación en Tomcat tiene dos etapas: primero importas la cadena de certificados y tu certificado firmado al keystore que ya contiene tu clave privada, y luego configuras el conector HTTPS en server.xml para que use ese keystore.
Paso 1: Prepara tus archivos de certificado SSL
Tu Autoridad de Certificación envía los archivos por correo electrónico a la dirección que proporcionaste, generalmente como un archivo ZIP. Extráelo. Según la CA, los archivos llegan en uno de dos formatos:
- PKCS#7: un único archivo .p7b (o .cer) que ya incluye tu certificado junto con los certificados raíz e intermedio.
- PEM: archivos separados, típicamente un .crt para tu certificado de servidor más archivos individuales root.crt e intermediate.crt.
Sube los archivos extraídos al servidor, en el mismo directorio que el keystore desde el que generaste tu CSR (referido a continuación como example.jks). Identifica tu formato y sigue las instrucciones correspondientes.
¿Generaste el CSR en otro lugar, de modo que tu clave privada es un archivo separado en lugar de una entrada en example.jks? Omite keytool: convierte PEM a PKCS#12 para agrupar el certificado, la cadena y la clave en un solo .p12, y luego haz referencia a ese archivo en el Paso 3 con certificateKeystoreType=»PKCS12″.
Paso 2: Importa el certificado a tu keystore
Formato PKCS#7. Como un .p7b ya contiene la cadena completa, un único comando importa todo de una vez, en tu alias existente de clave privada:
keytool -import -trustcacerts -alias ssldragon -keystore example.jks -file example.p7b
Reemplaza ssldragon por tu propio alias y example por los nombres de tus archivos. El alias debe ser aquel que ya contiene tu clave privada (el alias del paso del CSR). Cuando veas el mensaje Certificate reply was installed in keystore, la importación se realizó correctamente. Verifica el contenido del keystore con:
keytool -list -v -keystore example.jks
Busca una entrada cuyo tipo sea PrivateKeyEntry con una longitud de cadena de certificados mayor que 1. Eso confirma que el certificado firmado ya está adjunto a tu clave privada.
Formato PEM. Importa los certificados por separado, en orden de cadena: primero el raíz, luego los intermedios, y tu certificado de dominio al final. Importar la cadena primero permite que keytool construya una ruta de confianza completa antes de adjuntar la respuesta a tu clave. Importa el certificado raíz:
keytool -import -trustcacerts -alias root -keystore example.jks -file root.crt
Luego importa el certificado intermedio:
keytool -import -trustcacerts -alias intermediate -keystore example.jks -file intermediate.crt
Si tu CA proporciona varios certificados intermedios, importa cada uno bajo su propio alias de confianza, siguiendo el orden en que se firman entre sí (desde el raíz hacia abajo, hasta tu certificado de dominio). Por ejemplo, un certificado Sectigo PositiveSSL de Sectigo se distribuye con más de un intermedio, así que impórtalos en secuencia antes del certificado de dominio.
Finalmente, importa tu certificado principal (el emitido para tu dominio) en el alias existente de clave privada, el mismo alias que usaste al generar el CSR:
keytool -import -trustcacerts -alias ssldragon -keystore example.jks -file example.crt
Aquí, ssldragon debe ser tu alias existente de clave privada. Como 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: no importes 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 ninguna clave adjunta, y TLS fallará. Si no estás seguro de qué alias contiene tu clave, ejecuta keytool -list -v -keystore example.jks y usa el alias cuyo tipo sea PrivateKeyEntry.
Paso 3: Configura el conector HTTPS en server.xml
Con el certificado en tu keystore, dirige el conector HTTPS de Tomcat hacia él. El conector se define en server.xml, ubicado en la carpeta conf de tu instalación de Tomcat (por ejemplo $CATALINA_HOME/conf/server.xml). Abre 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 tu keystore. Añade o actualiza el conector seguro para que se vea 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 tu 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 tu 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 utiliza el que espere tu entorno. Si esta es tu primera configuración HTTPS, es posible que el conector seguro esté comentado en server.xml. Elimina los marcadores de comentario que lo rodean para que el conector esté activo, y asegúrate 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 detalles 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 que se debe usar en las versiones compatibles de Tomcat.
Paso 4: Guarda server.xml y reinicia Tomcat
Guarda server.xml, luego reinicia Tomcat para que recargue la configuración. En Linux, usa los scripts incluidos:
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
Si Tomcat se ejecuta como un servicio, reinícialo a través de tu gestor de servicios (por ejemplo systemctl restart tomcat en Linux, o el panel de Servicios en Windows). Felicidades, tu certificado SSL ya está instalado en tu servidor Tomcat.
Prueba tu instalación SSL en Tomcat
Después de instalar el certificado, pequeños errores pueden pasar desapercibidos y afectar cómo los navegadores tratan tu sitio. Adquiere el hábito de verificar la instalación. Ejecuta nuestro SSL Checker para un escaneo instantáneo que revela problemas como un certificado intermedio faltante o una cadena no confiable.
Preguntas frecuentes
La causa habitual es importar el certificado firmado bajo un alias nuevo en lugar del alias que ya contiene tu clave privada. keytool entonces lo almacena como una entrada de certificado de confianza sin clave, por lo que Tomcat no puede completar un handshake TLS. Vuelve a importar la respuesta firmada en el alias existente de clave privada (el de tu CSR). Confirma que funcionó ejecutando keytool -list -v -keystore example.jks y verificando que el alias aparezca como PrivateKeyEntry con una cadena de más de un certificado.
Importa primero la cadena. Añade el certificado raíz y los intermedios como entradas de confianza, en orden, y luego importa tu 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 tu clave. Con un archivo PKCS#7 (.p7b) la cadena ya viene incluida, así que una sola importación resuelve todo.
El conector HTTPS se define en server.xml, en el directorio conf de tu 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.
Sí. Tomcat admite ambos. Establece certificateKeystoreType como PKCS12 para un keystore .p12 o .pfx, o JKS para un keystore .jks, y dirige certificateKeystoreFile al archivo correspondiente. PKCS12 es el formato de keystore estándar y portable, por lo que es una buena opción predeterminada para nuevos keystores.
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, establece el port del conector en 443 y asegúrate de que ningún otro conector o servicio ya lo esté usando.
Ejecuta los scripts incluidos $CATALINA_HOME/bin/shutdown.sh seguido de $CATALINA_HOME/bin/startup.sh, o reinicia el servicio de Tomcat a través de tu gestor de servicios (por ejemplo systemctl restart tomcat en Linux, o el panel de Servicios en Windows). Es necesario reiniciar 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


