Este tutorial le muestra cómo instalar un certificado SSL en JBoss EAP y WildFly usando keytool y el subsistema de seguridad Elytron. Si aún no tiene sus archivos de certificado, la primera sección explica cómo generar un CSR.
Nota sobre versiones: las versiones modernas de JBoss EAP (7.1 y posteriores, incluido EAP 8) y las versiones recientes de WildFly configuran HTTPS a través del subsistema elytron conectado al https-listener de Undertow. El antiguo método security-realm y los conectores heredados de Tomcat o Jetty están obsoletos, por lo que esta guía utiliza el enfoque actual.
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 en JBoss
Un CSR (Certificate Signing Request) es un bloque de texto codificado que envía a la Autoridad de Certificación (CA) cuando solicita un certificado. Contiene los datos de su dominio y organización, que la CA utiliza para validar la solicitud. Al generar el CSR también se crea la clave privada correspondiente, que permanece en su servidor y es necesaria durante la instalación.
Tiene dos opciones:
- Use nuestro Generador de CSR para crear el CSR automáticamente.
- Siga nuestro tutorial paso a paso sobre cómo generar un CSR en JBoss.
En JBoss, el CSR se genera con keytool a partir de un almacén de claves .jks o .p12. Anote el alias y el nombre del keystore que elija ahora: más adelante importará el certificado firmado exactamente a ese mismo alias. Envíe el CSR a la CA durante su pedido, y una vez emitido el certificado, continúe con la instalación a continuación.
Instalar un certificado SSL en el servidor JBoss
Paso 1: Prepare sus archivos de certificado
Tras la validación, la CA le envía por correo electrónico sus archivos de certificado, normalmente en un archivo ZIP. Extráigalo. Debería tener:
- Su certificado primario (un archivo .crt, .cer o .pem).
- Los certificados intermedios, a menudo entregados como un archivo .ca-bundle (el paquete CA). Algunas CA incluyen también la raíz.
- El keystore (.jks o .p12) que creó con el CSR, el cual contiene su clave privada bajo el alias que eligió al generar el CSR.
Mantenga estos archivos juntos y cópielos al servidor, por ejemplo al directorio de configuración de JBoss ($JBOSS_HOME/standalone/configuration/). Si un archivo se abre como texto, puede confirmar que contiene las líneas esperadas BEGIN CERTIFICATE y END CERTIFICATE.
Paso 2: Importe la cadena de la CA al keystore
Importe primero los certificados intermedios (y el raíz, si se proporciona) para que keytool pueda construir una cadena de confianza completa. Use el mismo keystore que contiene su clave privada, y asigne a cada certificado de la CA su propio alias:
keytool -import -trustcacerts -alias root -file root.crt -keystore your_keystore.jks
keytool -import -trustcacerts -alias intermediate -file intermediate.crt -keystore your_keystore.jks
Si su CA proporcionó un único archivo .ca-bundle, impórtelo bajo un solo alias (por ejemplo -alias intermediate). Cuando se le solicite, introduzca la contraseña del keystore y confirme la confianza. Estas entradas son entradas de certificado de confianza, no entradas de clave, por lo que no afectan a su clave privada.
Paso 3: Importe el certificado firmado en su alias de clave
Ahora importe su certificado firmado (la respuesta de la CA) en el alias exacto que utilizó al generar el CSR. Como ese alias ya contiene la clave privada, keytool trata esto como una respuesta de certificado y reemplaza el certificado autofirmado temporal por la cadena firmada por la CA, manteniendo la clave intacta:
keytool -import -trustcacerts -alias your_csr_alias -file your_domain.crt -keystore your_keystore.jks
Reemplace your_csr_alias con el alias que utilizó al generar el CSR y your_keystore.jks con su keystore. Si tiene éxito, keytool muestra el mensaje Certificate reply was installed in keystore.
Importante: no invente un nuevo alias aquí. Importar la respuesta bajo un alias nuevo crea una entrada de certificado de confianza sin clave privada, la cadena se pierde y el servidor no puede completar el protocolo de enlace TLS. Si ve el mensaje Failed to establish chain from reply, significa que falta el intermedio o el raíz del Paso 2 en el keystore.
Puede verificar el resultado; el alias ahora debería mostrar una cadena de certificados de longitud mayor que 1:
keytool -list -v -alias your_csr_alias -keystore your_keystore.jks
Paso 4: Configure HTTPS en el subsistema Elytron
Coloque el keystore en $JBOSS_HOME/standalone/configuration/, luego defina un key-store, un key-manager y un server-ssl-context de Elytron. La forma más rápida es mediante la CLI de administración. Inicie el servidor, conéctese con jboss-cli.sh --connect, y ejecute un batch para que los cambios se apliquen juntos:
batch
/subsystem=elytron/key-store=httpsKS:add(path=your_keystore.jks, relative-to=jboss.server.config.dir, credential-reference={clear-text=your_keystore_password}, type=JKS)
/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS, credential-reference={clear-text=your_keystore_password})
/subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM, protocols=["TLSv1.3","TLSv1.2"])
run-batch
A continuación, apunte el https-listener de Undertow al nuevo ssl-context. Undertow no puede hacer referencia a un security-realm heredado y a un ssl-context de Elytron al mismo tiempo, así que elimine la referencia antigua y establezca la nueva en un solo batch:
batch
/subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=httpsSSC)
run-batch
Si prefiere editar directamente standalone.xml (con el servidor detenido), la configuración equivalente se ve así dentro del subsistema elytron:
<tls>
<key-stores>
<key-store name="httpsKS">
<credential-reference clear-text="your_keystore_password"/>
<implementation type="JKS"/>
<file path="your_keystore.jks" relative-to="jboss.server.config.dir"/>
</key-store>
</key-stores>
<key-managers>
<key-manager name="httpsKM" key-store="httpsKS">
<credential-reference clear-text="your_keystore_password"/>
</key-manager>
</key-managers>
<server-ssl-contexts>
<server-ssl-context name="httpsSSC" key-manager="httpsKM" protocols="TLSv1.3 TLSv1.2"/>
</server-ssl-contexts>
</tls>
Y el listener correspondiente en el subsistema undertow hace referencia a ese ssl-context:
<https-listener name="https" socket-binding="https" ssl-context="httpsSSC" enable-http2="true"/>
Limitar los protocols a TLS 1.3 y TLS 1.2 deshabilita los obsoletos TLS 1.0 y 1.1. El puerto HTTPS predeterminado es 8443; asígnelo al 443 con un balanceador de carga o una redirección de puerto si necesita el puerto estándar.
Paso 5: Reinicie JBoss
Si editó standalone.xml manualmente, reinicie el servidor para que cargue la nueva configuración. Si utilizó los batches de la CLI anteriores, los cambios se aplican de inmediato, pero una recarga confirma un inicio limpio:
jboss-cli.sh --connect --command=:reload
Observe el registro del servidor en busca de errores de SSL o Elytron durante el arranque. Una vez que arranque sin problemas, su certificado SSL estará instalado en JBoss.
Pruebe su instalación SSL
Tras la instalación, confirme que el certificado y la cadena se sirven correctamente. Abra su sitio a través de HTTPS (por ejemplo https://www.yourdomain.com:8443) y revise el candado, o ejecute un escaneo externo con nuestro SSL Checker para obtener un informe completo sobre el certificado, la cadena y la compatibilidad con protocolos. También puede comprobarlo desde la línea de comandos:
echo | openssl s_client -connect yourdomain.com:8443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -dates
Esto muestra el emisor y las fechas de validez del certificado que JBoss está sirviendo. Si el emisor es su CA (y no una entrada autofirmada), la respuesta se importó correctamente.
Preguntas frecuentes
Conéctese al puerto HTTPS con OpenSSL y lea el certificado que devuelve el servidor:echo | openssl s_client -connect yourdomain.com:8443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -subject -dates
Si hay un certificado instalado, esto muestra su emisor, sujeto y fechas de validez. También puede inspeccionar el keystore con keytool -list -v -keystore your_keystore.jks, o abrir su sitio en un navegador y revisar el candado.
El certificado reside dentro de un keystore, y el keystore es referenciado por el key-store de Elytron. Una ubicación común es el directorio de configuración del servidor, $JBOSS_HOME/standalone/configuration/, con la ruta del key-store de Elytron establecida como relative-to jboss.server.config.dir. Puede guardarlo en otro lugar siempre que la ruta del key-store apunte a él.
keytool no pudo construir una ruta desde su certificado hasta una raíz de confianza. Primero importe los certificados intermedio (y raíz, si se proporcionó) en el mismo keystore, con -trustcacerts, y luego importe la respuesta firmada en su alias de CSR. Si importó la respuesta bajo un alias completamente nuevo, la clave privada se pierde: elimine esa entrada y vuelva a importar en el alias de clave original.
Ejecute keytool -list -v -keystore your_keystore.jks y lea la línea Valid from de su alias, o use el comando OpenSSL anterior para ver las fechas que reporta el servidor en producción. La vigencia de los certificados TLS públicos se está reduciendo según las normas del CA/Browser Forum: a partir del 15 de marzo de 2026, el máximo será de 200 días, bajando a 100 días en 2027 y 47 días en 2029. Controle las fechas de renovación y renueve antes de la caducidad, o automatice la emisión donde su CA lo permita.
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


