Cómo encriptar contraseñas - y usar contraseñas encriptadas - en JBoss.
Normalmente, en las aplicaciones que realizamos para correr en jboss, es necesario conectarse a una base de datos.
Los datos de conexión a la base, incluso la contraseña de acceso, suelen estar en un archivo de texto plano ( "datasource", -ds.xml).
En este artículo, vamos a describir la forma de encriptar las claves usadas en los archivos datasource, por medio de bibliotecas disponibles en JBoss, y cómo configurar el acceso a la base de datos, con la contraseña encriptada desde JBoss.
Para más información, ver la documentación de JBoss sobre JAAS, y es interesante el capítulo 5 del libro: "JBoss: A Developer's Notebook" de O'Reilly.
Configurando un datasource seguro:
1) Ejemplo de datasource con contraseña en texto plano.
A continuación, un archivo datasource sencillo, con la contraseña sin cifrar.
<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================= -->
<!-- JBoss Server Configuration -->
<!-- =================================-->
<datasources>
<local-tx-datasource>
<jndi-name>conectarbd-ds</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/miaplicacion</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>miUsuario3</user-name>
<password>miClaveAEncriptar</password>
<metadata>
<type-mapping>MySQL 5.0</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
2) Encriptando con JBoss.
Esto se realiza por medio de la clase: SecureIdentityLoginModule, que necesita varias bibliotecas.
En linux, desde la consola y estando dentro del directorio por defecto de jboss ( "cd $JBOSS-HOME" ), ejecutamos:
java -cp 'server/default/lib/jboss-jca.jar:lib/jboss-common.jar:server/default/lib/jbosssx.jar' org.jboss.resource.security.SecureIdentityLoginModule miClaveAEncriptar
Resultado: Encoded password:
-16c58451fa3dac3f363f3bc6ae2a8f26e0f4fadaae6c7657
Notas:
En windows, se tiene que cambiar los dos puntos (":") por punto y coma (";") como caracter separador entre las bibliotecas.
Recordar que el parámetro "-cp" indica el classpath, o sea, las bibliotecas que se necesitan para ejecutar la aplicación.
3) Definir un dominio seguro.
Se modifica el archivo login-config.xml (Dependiendo de la configuración usada, por ejemplo en: $JBOSS-HOME/server/default/conf/login-config.xml)
En este archivo, se tiene que agregar un bloque "application-policy".
El nombre dado a este bloque se usará luego en el archivo datasource.
En este bloque se agrega el usuario y la contraseña encriptada previamente.
La forma que este bloque se conecta con el datasource, es por medio del nombre jndi dado a ese archivo.
<application-policy name = "MiSecurityDomainDLix">
<authentication>
<login-module code = "org.jboss.resource.security.SecureIdentityLoginModule" flag = "required">
<!-- usuario para conectarse a la base -->
<module-option name = "username">miUsuario3</module-option>
<!-- clave encriptada -->
<module-option name = "password">
-16c58451fa3dac3f363f3bc6ae2a8f26e0f4fadaae6c7657</module-option>
<!-- nombre jndi en el datasource -->
<module-option name= "managedConnectionFactoryName">
jboss.jca:service=LocalTxCM,name=conectarbd-ds</module-option>
</login-module>
</authentication>
</application-policy>
4) Agregar un dominio seguro al datasource.
El último paso es modificar el datasource.
Se configura el elemento "security-domain" con el nombre usado en el paso anterior, y se elimina las entradas de "user-name" y "password".
<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================= -->
<!-- JBoss Server Configuration -->
<!-- ================================= -->
<datasources>
<local-tx-datasource>
<jndi-name>conectarbd-ds</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/miaplicacion</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<metadata>
<type-mapping>MySQL 5.0</type-mapping>
</metadata>
<security-domain>MiSecurityDomainDLix</security-domain>
</local-tx-datasource>
</datasources>
Estos pasos fueron probados en Jboss: 4.2.2, 4.2.3 y 4.3
Encriptar password en JBoss
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario