Esta configuración es para WildFly 8, pero funciona con las versiones 9 y 10. Tomar en cuenta que se debe tener las utilidades openssl y keytool instaladas y de preferencia en el path, para ejecutar los comandos descritos.
Bueno, se tiene el desafío de configurar servidores WildFly/JBoss para utilizar HTTPS. Se debe partir generando los siguientes archivos y certificados SSL que se detallan a continuación:
midominio.com.csr (Certificate Signing Request) y midominio.com.key (Llave Privada para nuestro Certificado SSL)
Este es el primer paso, se debe generar esta «Solicitud de Firma de Certificado» desde el servidor midominio.com donde se desea instalar el certificado SSL. Es recomendable utilizar como minimo una llave de 2048 bits.
Los archivos .csr y .key se generan con el siguiente comando:
|
openssl req -new -newkey rsa:2048 -nodes -keyout midominio.com.key -out midominio.com.csr |
Esto nos devolverá el siguiente mensaje en la pantalla:
|
Generating a 2048 bit RSA private key ...+++ ..................+++ writing new private key to 'midominio.com.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- |
Luego debemos proveer la información referente a nuestra organización (midominio.com)
|
Country Name (2 letter code) [XX]:BO State or Province Name (full name) []:Santa Cruz Locality Name (eg, city) [Default City]:Santa Cruz de la Sierra Organization Name (eg, company) [Default Company Ltd]:MiDominio.com Organizational Unit Name (eg, section) []:Sistemas Common Name (eg, your name or your server's hostname) []:midominio.com Email Address []:info@midominio.com |
|
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:mypassword An optional company name []: |
Ahora si estamos listos para comprar nuestro certificado SSL. Un certificado estándar probablemente sera todo lo que se necesite para obtener seguridad básica. Hay distintos sitios que proveen certificados SSL a buen precio, como GoDaddy.com o SSLs.com.
Luego de comprar el certificado el siguiente paso es activarlo con el proveedor, el mismo solicitará copiar el contenido del archivo .csr creado con anterioridad.
|
$ cat midominio.com.csr -----BEGIN CERTIFICATE REQUEST----- 2nssaaSO8cVlv30SG5mMtR5Pvd0nQ1TPf4qZPypXiJuX/e0F7HwI9GkCAwEAAaAb MBkGCSdereb3DQEJBzEMDApteXBhc3N3b3JkMA0GCSqGSIb3DQEBCwUAA4IBAQC4 as15d55asd564a5sdas -----END CERTIFICATE REQUEST----- |
Una vez emitido el certificado SSL en base a la información proporcionada, lo descargamos y descomprimimos
Los archivos que necesitamos del paquete son:
ssl_certificate.crt (Certificado SSL de midominio.com) y IntermediateCA.crt (Certificado del Emisor o Proveedor del certificate de midominio.com) junto con el archivo midominio.com.key generado con anterioridad.
Ahora debemos crear un archivo .jks para importarlo en el keystore. Este es un proceso de 3 pasos: primero creamos un archivo pkcs12 (con extensión .p12) a partir del certificado SSL, luego lo importamos en un archivo keystore y por ultimo tambien importamos el IntermediateCA.crt en el keystore.
Paso 1
|
openssl pkcs12 -export -in ssl_certificate.crt -inkey midominio.com.key -out midominio.com.p12 -name default -CAfile IntermediateCA.crt -caname root |
Paso 2
|
keytool -importkeystore -deststorepass mypassword -destkeypass mypassword -destkeystore midominio.com.jks -srckeystore midominio.com.p12 -srcstoretype PKCS12 -srcstorepass mypassword -alias default |
* Si desean hacer la prueba también pueden generarse un certificado local e importarlo al keystore, siguiendo los pasos en este artículo: Generar un certificado local e importarlo en el keystore para habilitar SSL en WildFly.
Paso 3
Convertir el IntermediateCA.crt a .pfx
|
openssl pkcs12 -export -out output_cert.pfx -inkey midominio.com.key -in ssl_certificate.crt -certfile IntermediateCA.crt |
Importar el certificado .pfx a nuestro keystore.
|
keytool -v -importkeystore -srckeystore output_cert.pfx -srcstoretype PKCS12 -destkeystore midominio.com.jks -deststoretype JKS |
Luego adicionar la siguiente entrada dentro del archivo standalone.xml en la sección security-realms.
|
<security-realm name="SslRealm"> <server-identities> <ssl> <keystore path="midominio.com.jks" relative-to="jboss.server.config.dir" keystore-password="mypassword"> </keystore></ssl> </server-identities> </security-realm> |
Luego de tener importados los certificados, agregamos la siguiente entrada dentro del archivo standalone.xml en la sección server name.
|
<https-listener name="default-ssl" socket-binding="https" security-realm="SslRealm"> </https-listener> |
Si deseamos redireccionar todas las peticiones http hacia https, entonces modificamos la linea adicionando redirect-socket=»https»
|
<server name="default-server"> <http-listener name="default" socket-binding="http" redirect-socket="https"> </http-listener></server> |
No olvidemos tambien verificar que nuestro puerto SSL este correctamente definido dentro la sección socket-binding-group name=»standard-sockets»
|
<socket-binding name="https" port="${jboss.https.port:443}"> </socket-binding> |
Adicionar en el archivo web.xml (Esto requiere volver a empaquetar el .war y volverlo a desplegar en WildFly)
|
<security-constraint> <web-resource-collection> <web-resource-name>Secure URLs</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> |
Reiniciamos WildFly, volvemos a desplegar el .war y hacemos la prueba ingresando a midominio.com ya sea desde https o http en caso tenemos activa la redirección.
Saludos.