Mejorando la seguridad de Jboss: cifrado de las contraseñas de los ficheros de credenciales

Tener las consolas de Jboss (JMX, web console, admin console, jbossws…) protegidas por contraseña es una medida esencial de seguridad del servidor de aplicaciones para evitar que información sensible del servidor de aplicaciones esté a la vista de todo el mundo. El problema es que la securización básica deja las contraseñas tal cual las pusimos en los ficheros de configuración, en texto plano. En caso de un acceso no autorizado a nuestro servidor alguien podría leer facilmente esas contraseñas en los ficheros de configuración correspondientes.

Recordad que los ficheros de credenciales suelen estar en:

$JBOSS_HOME/server/INSTANCIA/conf/props

Donde INSTANCIA por norma general es default, all o minimal. Por ejemplo el fichero de credenciales de la Consola JMX es:

$JBOSS_HOME/server/INSTANCIA/conf/props/jmx-console-users.properties

Codificando la contraseña con OpenSSL

Para ello realizaremos lo siguiente: Primero un echo donde especificamos la contraseña, esa salida la mandamos con un pipe a OpenSSL que lo toma como un input y aplica la función de hash de md5 para obtener un digest (resumen) de salida que finalmente dejamos codificado en formato base64:

echo -n migrancontrasena01 | openssl dgst -md5 -binary | openssl base64
Codificación de contraseña

Codificación de contraseña

Configurando las credenciales en Jboss

Utilizaré en este caso el ejemplo que puse al principio con la consola JMX. Tendremos que añadir en el fichero de credenciales:

$JBOSS_HOME/server/INSTANCIA/conf/props/jmx-console-users.properties

El par de valores usuario=contraseña. Obviamente, en la contraseña ponemos el valor obtenido al codificar con OpenSSL:

admin=Bkv9uzEjyat8a5m0bDgWsA==

Ahora el servidor Jboss debe saber cómo está codificada esa contraseña para saber decodificarla y que podamos hacer uso de ella. Para ello añadimos las opciones de módulo hashAlgorithm y hashEncoding en las políticas de aplicación del fichero login-config.xml:

$JBOSS_HOME/server/INSTANCIA/conf/login-config.xml

En ese fichero buscamos:

<application-policy name="jmx-console">

Y dentro añadimos:

<module-option name="hashAlgorithm">MD5</module-option>
<module-option name="hashEncoding">base64</module-option>
Añadiendo seguridad al módulo

Añadiendo seguridad al módulo

Después de añadir las opciones de módulo, reiniciamos el servidor de aplicaciones. Al entrar nos pedirá credenciales como hacía antes, e introduciremos “admin” como usuario y “migrancontrasena01” como contraseña.

Este método también sirve para la Consola Web y la de Web Services. Bastará con añadir las opciones hashAlgorithm y hashEncoding en los apartados correspondientes del fichero login-config.xml

También mencionar que la contraseña de ejemplo que he utilizado para este artículo (migrancontrasena01) tiene simplemente fines didácticos y no sería adecuada para un entorno de Producción. Ya dije hace un tiempo la importancia que tiene elegir una buena contraseña.