Configurando atributos seguros com Vault

O papel do Vault é fazer a criptografia de strings que estão como plain text nos arquivos de configuração do Wildfly (standalone.xml ou domain.xml) e armazená-las dentro de uma keystore criptografada. Como por exemplo, credenciais de acesso ao banco de dados, que normalmente são escritos diretamente no arquivo. Abaixo vamos ver como configurar vault no WildFly.

Vault utiliza keystore para armazenar as chaves (senhas), usando assim os certificados armazenados nesta keystore como uma chave criptografada para o vault. Vamos primeiro entender o comando keytool -genseckey que irar gerar uma secret key para que possamos armazenar as senhas. Abaixo usamos o comando -help para ver o que cada atributo representa.

$ keytool -help
Key and Certificate Management Tool

Commands:

 -genseckey          Generates a secret key

$ keytool -genseckey -help
keytool -genseckey [OPTION]...

Generates a secret key

Options:

-alias <alias>                  alias name of the entry to process
-keypass <arg>                  key password
-keyalg <keyalg>                key algorithm name
-keysize <keysize>              key bit size
-keystore <keystore>            keystore name
-storepass <arg>                keystore password
-storetype <storetype>          keystore type

Para iniciar o Vault é necessário criar uma keystore com  JavaSE, como mostrado a seguir:

$ keytool -genseckey -alias vault -keyalg AES -storetype jceks -keysize 128 -keystore /opt/vault/vault.keystore
  • alias: Um alias é um identificador unico para o vault ou qualquer outro dados armazenado numa keystore;
  • keylg: Algoritimo utilizado para realizar a criptografia;
  • storetype: Tipo de armazenamento utilizado, o recomendado é utilizar o jceks.
  • keysize: O tamanho da chave criptografada, quanto maior, mais difícil será decriptografa-la.
  • keystore: Local de armazenamento da keystore.

Após executar o comando acima, ele irá pedir uma senha (que deve ser a senha a ser armazenada) e após isso irá criar o arquivo keystore em /opt/vault/. Lembre-se de  criar a pasta /opt/vault ou de trocar o local da keystore.


$ JBOSS_HOME/bin/vault.sh -help

...

usage: vault.sh <empty> |  [-a <arg>] [-b <arg>] -c | -h | -r | -x <arg>
       [-e <arg>]  [-i <arg>] [-k <arg>] [-p <arg>]  [-s <arg>] [-t] [-v
       <arg>]
 -a,--attribute <arg>           Attribute name
 -b,--vault-block <arg>         Vault block
 -c,--check-sec-attr            Check whether the secured attribute
                                already exists in the Vault
 -e,--enc-dir <arg>             Directory containing encrypted files
 -h,--help                      Help
 -i,--iteration <arg>           Iteration count
 -k,--keystore <arg>            Keystore URL
 -p,--keystore-password <arg>   Keystore password
 -r,--remove-sec-attr           Remove secured attribute from the Vault
 -s,--salt <arg>                8 character salt
 -t,--create-keystore           Automatically create keystore when it
                                doesn't exist
 -v,--alias <arg>               Vault keystore alias
 -x,--sec-attr <arg>            Secured attribute value (such as password)
                                to store

O próximo passo é criar o vault em si, passando os parâmetros usado para criar a keystore. Para isso, no terminal acesse $WILDFLY_HOME/bin e execute o comando abaixo:

$ vault.sh

Please enter a Digit:: 0: Start Interactive Session 1: Remove Interactive Session 2: Exit

Entre com o valor 0 para iniciarmos o modo interativo, onde os dados são passados um a um, como mostrado abaixo:

Enter directory to store encrypted files: /opt/vault/ <-- 1
Enter Keystore URL: /opt/vault/vault.keystore <-- 2
Enter Keystore password: <-- 3
Enter Keystore password again: <-- 4
Values match
Enter 8 character salt: 12345678 <-- 5
Enter iteration count as a number (e.g.: 44): 50 <-- 6
Enter Keystore Alias: vault <-- 7
  1.  Local para armazenar os arquivos criptografados, deve ser o mesmo utilizado para armazenar a keystore;
  2. Local onde esta a keystore;
  3. Senha utlizada para criar a keystore;
  4. Repita a senha;
  5. Uma string de 8 caracteres usado para criptografar os atributos armazenados no vault
  6. Número de vezes que a encriptação irá rodar;
  7. Alias que identifica o atributo armazenado na keystore, criado anteriormente.

O resultado será uma saída como a mostrada abaixo, salve está saida em um arquivo, vamos usá-la mais adiante.

********************************************
...
</extensions>
<vault>
  <vault-option name="KEYSTORE_URL" value="/opt/jboss/as/vault/vault.keystore"/>
  <vault-option name="KEYSTORE_PASSWORD" value="MASK-3XSTQeMXgl8WzQ4euYc.F5"/>
  <vault-option name="KEYSTORE_ALIAS" value="vault"/>
  <vault-option name="SALT" value="12345678"/>
  <vault-option name="ITERATION_COUNT" value="50"/>
  <vault-option name="ENC_FILE_DIR" value="/opt/jboss/as/vault/"/>
</vault><management> ...
********************************************

Please enter a Digit:: 0: Store a secured attribute 1: Check whether a secured attribute exists 2: Remove secured attribute 3: Exit

Pressione 0 para armazenar os atributos de segurança (senhas) etc.

Please enter secured attribute value (such as password) <-- 1
Please enter secured attribute value again <--2
Values match
Enter Vault Block:vb <-- 3
Enter Attribute Name:password <-- 4
  1. Senha que deverá ser armazenada, como a senha do banco de dados por exemplo;
  2. Repita a senha acima;
  3. O nome a ser dado para o bloco vault
  4. Nome do atributo a ser armazenado, como “password” por exemplo.
WFLYSEC0047: Secured attribute value has been stored in Vault.
Please make note of the following:
********************************************
Vault Block:vb
Attribute Name:password
Configuration should be done as follows:
VAULT::vb::password::1
********************************************
Please enter a Digit:: 0: Store a secured attribute 1: Check whether a secured attribute exists 2: Remove secured attribute 3: Exit

Caso tudo ocorrra bem, a saída acima deve ser mostrada, pressione 3 para sair do modo interativo. Lembre de salvar a saída acima em um arquivo.

...
    </extensions>

    <vault>
       <vault-option name="KEYSTORE_URL" value="/opt/jboss/as/vault/vault.keystore"/>
       <vault-option name="KEYSTORE_PASSWORD" value="MASK-3XSTQeMXgl8WzQ4euYc.F5"/>
       <vault-option name="KEYSTORE_ALIAS" value="vault"/>
       <vault-option name="SALT" value="12345678"/>
       <vault-option name="ITERATION_COUNT" value="50"/>
       <vault-option name="ENC_FILE_DIR" value="/opt/jboss/as/vault/"/>
   </vault>

    <management>
...

Copie a o trecho entre as tags </extensions> … <management> e cole entre essas mesmas tags dentro do arquivo standalone.xml.

<security>
    <user-name>root</user-name>
    <password>${VAULT::vb::password::1}</password>
</security>

E por fim, altere a o valor da tag <password> … </password> do seu data source em standalone.xml, como mostrado acima, passando o valor abaixo, exibido quando atribuimos segurança ao vault.

Configuration should be done as follows:
VAULT::vb::password::1

Por fim basta iniciar o Wildfly, e a seguinte saída deverá ser exibida:

15:49:15,138 INFO [org.jboss.security] (Controller Boot Thread) PBOX00361: Default Security Vault Implementation Initialized and Ready

Era isso, em breve mais posts sobre Segurança, Wildfly, ou quarquer outra coisa que aparecer :p

Valeu Falows!

Deixe um comentário

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 )

Foto do Google+

Você está comentando utilizando sua conta Google+. 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 )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.