Criptografando Senhas e Informações Sensíveis no JBoss AS 7.1.3 ( JBoss EAP 6.0.1 )

Postado em Atualizado em

increase-internet-security

Olá amigos,

O JBoss AS 7 possui um utilitário JBOSS_HOME/bin/vault.sh que permite criptografar informações sensíveis como senhas e amazenar em encrypted keystores.

Por exemplo, atualmente temos  o datasource do MySQL com a senha configurada em plaintext:

<datasource jndi-name="java:/MySQLDS" pool-name="MySQLDS-Pool" enabled="true" use-java-context="true">
  <connection-url>jdbc:mysql://localhost:3306/jbossdb</connection-url>
  <driver>mysql-connector-java-5.1.22-bin.jar</driver>
  <security>
     <user-name>root</user-name>
     <password>123456</password>
  </security>
</datasource>

Para realização dos testes de lookup no Datasource java:/MySQLDS  estou utilizando a aplicação dstest.war Perceba que fiz o lookup e realizei um select com sucesso!

1

testds2testds-select

Objteivo é criptografar o atributo passsword utilizando o JBOSS_HOME/bin/vault.sh  e realizar novamente os testes.

Como pré-requisito precisamos de uma Java Keystore e consequentemente que um JDK esteja configurado corretamente pois vamos utilizar o Keytool  para gerar a keystore.

O primeiro passo é criar um diretório para armazenar a keystore.

Crie um diretório chamado vault:

  mkdir  /home/jboss/vault

Navegue até o diretório criado e execute os comandos para gerar a keystore:

  keytool -genkey -alias vault -keystore vault.keystore -keyalg RSA -keysize 1024 -storepass 123456 -keypass 123456 -dname "CN=Mauricio Magnani,OU=JBossDivers,O=JBoss,L=Sao Paulo,ST=SP,C=BR"

Execute o script JBOSS_HOME/bin/vault.sh e siga os procedimentos informados:

[jboss@localhost /]$ ./usr/local/jboss/7.1.3/jboss-eap-6.0/bin/vault.sh
=========================================================================

JBoss Vault

JBOSS_HOME: /usr/local/jboss/7.1.3/jboss-eap-6.0

JAVA: java

VAULT Classpath: /usr/local/jboss/7.1.3/jboss-eap-6.0/modules/org/picketbox/main/*:/usr/local/jboss/7.1.3/jboss-eap-6.0/modules/org/jboss/logging/main/*:/usr/local/jboss/7.1.3/jboss-eap-6.0/modules/org/jboss/common-core/main/*:/usr/local/jboss/7.1.3/jboss-eap-6.0/modules/org/jboss/as/security/main/*
=========================================================================

**********************************
****  JBoss Vault ********
**********************************
Please enter a Digit::   0: Start Interactive Session  1: Remove Interactive Session  2: Exit
0
Starting an interactive session
Enter directory to store encrypted files (end with either / or \ based on Unix or Windows:/home/jboss/vault/
Enter Keystore URL:/home/jboss/vault/vault.keystore
Enter Keystore password:
Enter Keystore password again:
Values match
Enter 8 character salt:12345678
Enter iteration count as a number (Eg: 44):40

Please make note of the following:
********************************************
Masked Password:MASK-EjBzy4a2hjd
salt:12345678
Iteration Count:40
********************************************

Enter Keystore Alias:vault
Obtained Vault
Initializing Vault
Apr 2, 2013 11:29:38 PM org.picketbox.plugins.vault.PicketBoxSecurityVault init
INFO: PBOX000361: Default Security Vault Implementation Initialized and Ready
Vault is initialized and ready for use
Handshake with Vault complete
Please enter a Digit::   0: Store a password  1: Check whether password exists  2: Exit
0
Task:  Store a password
Please enter attribute value: jboss
Please enter attribute value again: jboss
Values match
Enter Vault Block:MySQLDS
Enter Attribute Name:password
Attribute Value for (MySQLDS, password) saved

Please make note of the following:
********************************************
Vault Block:MySQLDS
Attribute Name:password
Shared Key:YjVmN2RjMTgtOTIxNi00MDA4LWI5NmEtMThjYTRhOTc4NzY2TElORV9CUkVBS3ZhdWx0
Configuration should be done as follows:
VAULT::MySQLDS::password::YjVmN2RjMTgtOTIxNi00MDA4LWI5NmEtMThjYTRhOTc4NzY2TElORV9CUkVBS3ZhdWx0
********************************************

Please enter a Digit::   0: Store a password  1: Check whether password exists  2: Exit

Abaixo de <extensions> adicione os atributos da keytore para o vault:

<vault>
  <vault-option name="KEYSTORE_URL" value="/home/jboss/vault/vault.keystore"/>
  <vault-option name="KEYSTORE_PASSWORD" value="MASK-EjBzy4a2hjd"/>
  <vault-option name="KEYSTORE_ALIAS" value="vault"/>
  <vault-option name="SALT" value="12345678"/>
  <vault-option name="ITERATION_COUNT" value="40"/>
  <vault-option name="ENC_FILE_DIR" value="${user.home}/vault/"/>
</vault>

Perceba que os valores utilizados na configuração do vault são os mesmos gerados pelo JBOSS_HOME/bin/vault.sh.

Agore adicione a senha criptografada no Datasource, deixando-o como abaixo:

<datasource jndi-name="java:/MySQLDS" pool-name="MySQLDS-Pool" enabled="true" use-java-context="true">
   <connection-url>jdbc:mysql://localhost:3306/jbossdb</connection-url>
   <driver>mysql-connector-java-5.1.22-bin.jar</driver>
   <security>
      <user-name>root</user-name>
      <password>${VAULT::MySQLDS::password::YjVmN2RjMTgtOTIxNi00MDA4LWI5NmEtMThjYTRhOTc4NzY2TElORV9CUkVBS3ZhdWx0}</password>
   </security>
</datasource>

Inicie o JBoss e faça os testes novamente com a aplicação dstest.war.

1

testds2dstest-final


Perceba que conseguimos realizar o lookup e o select com sucesso utilizando o password criptografado com o utilitário  JBOSS_HOME/bin/vault.sh.

O objetivo do post foi mais prático mesmo mas se desejar informações detalhadas aconselho a documentação oficial do produto:

Espero que tenha ajudado🙂

Aquele Abraço

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s