Protéger les mots de passe de WildFly dans un caveau


EN COURS DE REDACTION...

La technique de Vault permet de ne plus afficher les mots de passe, ou autres chaines de caractères sensibles, dans les fichiers de configuration de WildFly. Cette fonctionnalité a été introduite en JBoss AS 7.1.

Fonctionnement

Mise en oeuvre

keystore

Pour créer le keystore, on utilise l'outil keytool fourni avec le JDK. On crée le magasin et on y inclut directement l'alias vault qu'on utilisera plus tard.

keytool -genkey -alias vault -keystore vault.keystore -storepass vaultpwd -keypass vaultpwd -dname "CN=vault,O=Sewatech,C=fr"

vault

Le script vault.sh peut être utilisé de façon interactive ou avec des paramètres. Dans le mode interactif, la procédure est bien expliquée et documentée (cf. ). Par contre, le mode avec paramètres n'est pas documenté, mais vault.sh --help apporte les informations nécessaires.

Pour initialiser notre caveau, il faut indiquer les informations sur le keystore (fichier, alias du caveau, mot de passe), le répertoire qui contiendra les fichiers chiffrés, les informations de salage du mot de passe (chaine et nombre d'itérations). On y stocke directement des informations sensibles, avec le bloc, le nom et la valeur de l'attribut.

bin/vault.sh -k standalone/security/vault.ks -v vault -p vaultpwd -e standalone/security/ -s sewatech -i 42 -b SewaDS -a pwd -x sa

Le première parte du résultat est le contenu du caveau, avec la chaine à utiliser à la place du mot de passe :

********************************************
Vault Block:SewaDS
Attribute Name:pwd
Shared Key:YzhkNGRlOWYtZGExMy00NzJjLWEzNDQtY2NjMjhmOGE0ZGUzTElORV9CUkVBS3ZhdWx0
Configuration should be done as follows:
VAULT::SewaDS::pwd::YzhkNGRlOWYtZGExMy00NzJjLWEzNDQtY2NjMjhmOGE0ZGUzTElORV9CUkVBS3ZhdWx0
********************************************

La seconde partie du résultat est la portion d'XML qu'on peut directement intégrer à notre fichier standalone.xml :

<vault>
  <vault-option name="KEYSTORE_URL" value="standalone/security/vault.ks"/>
  <vault-option name="KEYSTORE_PASSWORD" value="MASK-2pHSVF2jQLBTf0XIqKTFy4"/>
  <vault-option name="KEYSTORE_ALIAS" value="vault"/>
  <vault-option name="SALT" value="sewatech"/>
  <vault-option name="ITERATION_COUNT" value="42"/>
  <vault-option name="ENC_FILE_DIR" value="standalone/security/"/>
</vault>

configuration

Cette configuration de caveau peut maintenant être intégrée, soit en ajoutant la portion XML générée au fichier standalone.xml, soit par ligne de commande.

/core-service=vault:add(vault-options={"KEYSTORE_URL"=>"${jboss.server.base.dir}/security/vault.ks","KEYSTORE_PASSWORD" => "MASK-2pHSVF2jQLBTf0XIqKTFy4","KEYSTORE_ALIAS" => "vault","SALT" => "sewatech","ITERATION_COUNT" => "42","ENC_FILE_DIR" => "${jboss.server.base.dir}/security/"})

utilisation

On peut maintenant utiliser le mot de passe stocké dans le caveau avec la chaine générée, qui commence par VAULT. Dans mon cas, je voulais l'utiliser pour une datasource dont la configuration ressemblait à ça :

<datasource ...>
  ...
  <security>
    <user-name>sa</user-name>
    <password>sa</password>
  </security>
</datasource>

La nouvelle configuration devient :

<datasource ...>
  ...
  <security>
    <user-name>sa</user-name>
    <password>${VAULT::SewaDS::pwd::YzhkNGRlOWYtZGExMy00NzJjLWEzNDQtY2NjMjhmOGE0ZGUzTElORV9CUkVBS3ZhdWx0}</password>
  </security>
</datasource>

Références