Contacto

Nos puedes enviar un artículo a publicar (si te fue útil, seguro que a otros también).
Nos puedes sugerir temas/profundidad de interés.
correo-e - perfil

Busquedas

Encriptar password en JBoss

 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

No hay comentarios: