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
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>
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.