Die Passwortschatzkammer Vault

Applikationen enthalten häufig Klartext-Konfigurationsdateien, welche sensible Daten beinhalten, dies umfasst Passwörter sowie andere sicherheitskritische Textelemente. Beispielsweise sollte der technische Benutzer und das Passwort einer Datasource für eine Produktivdatenbank nicht für jeden ersichtlich sein. Um solche sensiblen Daten innerhalb der Konfiguration zu verschlüsseln enthält der JBoss AS 7 sowie die Enterprise Application Platform (EAP6) das Vault-Tool. Das Vault-Tool ermöglicht die Verwaltung von Passwörtern und anderen Klartextbausteinen sowie deren verschlüsselte Verwendung innerhalb der Konfigurationsdateien des Applikationsservers.

Der folgende Blogbeitrag beschreibt wie mit Hilfe des Vault-Tools sensible Passwörter oder Textbausteine verschlüsselt werden können. Als Beispiel dient die Authentifizierung zwischen Domain-Controller und Host-Controller im Domain-Mode.

Vault Konfiguration

Einrichten eines Java Keystore

Zunächst wird ein Java Keystore benötigt, mit dem das Vault-Tool Textbausteine verschlüsseln kann. Mit dem keytool aus dem JDK kann wie folgt ein Keystore erzeugt werden:

keytool -keystore /path/to/keys.jks -genkey -alias vaultkey  -keyalg RSA -keysize 2048

Der Keystore sollte in einem gesonderten Verzeichnis erstellt werden um darauf verweisen zu können. Das Verzeichnis und der Name des Keystores wird mit dem „–keystore“ Parameter angegeben. Standardmäßig wird eine .keystore Datei im Home-Verzeichnis erstellt. Der öffentliche und private Schlüssel wird mit dem Parameter „-genkey“ generiert. Der Algorithmus und die Größe des Schlüsselpaares werden mit den Parametern „-keyalg“ und „-keysize“ bestimmt. Mit dem Alias kann später das Schlüsselpaar des Keystores identifiziert werden.

Keytool
Keytool

Vault Initialisierung

Der nächste Schritt ist die Verwendung des Vault-Tools, um Textbausteine zu verschlüsseln. Das Tool befindet sich im „JBOSS_HOME/bin“ Verzeichnis des Applikationsservers und kann mit dem Skript vault.sh bzw. vault.bat gestartet werden. Eine Vault Initialisierung erfolgt über eine interaktive Session. Die folgenden Werte müssen angegeben werden:

  1. Angabe des Ordners zum ablegen der verschlüsselten Dateien
  2. Angabe der Keystore URL (Pfad zu unserem vorher angelegten Keystore)
  3. Angabe des Passworts für den Keystore
  4. Angabe des zu verwendenden Salt (8 Zeichen)
  5. Angabe des Iteration Count

Nach der Initialisierung werden die Werte „Masked Password“, „Salt“ und „Iteration Count“ ausgegeben. Diese Werte sind für die Konfiguration des Vault-Tools innerhalb des Applikationsservers erforderlich. Abschließend muss noch der Keystore Alias angegeben werden.

vault.sh Beispiel
vault.sh Initialisierung

Passwortverschlüsselung

Der nächste Schritt ist das Speichern des Passworts. Das zu verschlüsselnde Klartextpasswort kann mit der Option „0 – Store a Password“ verschlüsselt werden. Es müssen außerdem noch ein Vault Block (eine Art Sammelcontainer) und der Attribute Name (Bezeichnung des zu verschlüsselnden Wertes) angegeben werden. Beide Angaben werden für die spätere Verwendung benötigt.

vault.sh Beispiel
vault.sh Verschlüsselung

Einbinden von Vault in die host.xml des Host-Controller

Das Vault-Tool kann sowohl im Standalone als auch im Domain Mode des JBoss AS 7 verwendet werden. Um verschlüsselte Elemente des Vaults zu verwenden muss dieses in der jeweiligen Konfigurationsdatei bekannt gemacht werden. In unserem Beispiel soll das Klartextpasswort für die Host Authentifizierung durch das verschlüsselte Passwort ausgetauscht werden. Dazu muss die folgende Vault Konfiguration zu der Host Konfigurationsdatei des Host-Controllers hinzugefügt werden.

[sourcecode language=”xml”]<host name="node1" xmlns="urn:jboss:domain:1.3">
<vault>
<vault-option name="KEYSTORE_URL" value="/etc/opt/keystore/keys_example.jks"/>
<vault-option name="KEYSTORE_PASSWORD" value="MASK-FdnxprJLfX0"/>
<vault-option name="KEYSTORE_ALIAS" value="vaultkey"/>
<vault-option name="SALT" value="12345678"/>
<vault-option name="ITERATION_COUNT" value="43"/>
<vault-option name="ENC_FILE_DIR" value="/etc/opt/keystore/"/>
</vault>
<!– … –>
</host>[/sourcecode]

Alternativ lässt sich dieser Baustein auch per CLI-Tool einfügen.

Das Klartextpasswort für die Host Authentifizierung kann jetzt mit dem verschlüsselten Passwort aus der Schatzkammer wie folgend ausgetauscht werden:

[sourcecode language=”xml”]<server-identities>
<!– Replace this with either a base64 password of your own, or use a vault with a vault expression –>
<secret value="${VAULT::VaultBlock::VaultAttribute::ZDk5OThhMGQtZTc2YiOOYjEyLWFlOWEtMDJjZDY0MTI0ZGY2Tel0RV9CUkVBS3ZhdWx0a2V5}" />
</server-identities>[/sourcecode]

Neben dem Schlüssel muss der Vault-Block und der Attribut-Name mit angegeben werden.

Zusammenfassung

Mit dem Vault-Tool und die Konfiguration innerhalb des Applikationsservers können sensible Daten verschlüsselt abgelegt werden. Der Java Keystore kann dabei auf ein gesichertes Medium abgelegt werden und ist nur für den Start-Vorgang des Applikationsservers bzw. der Server-Domäne erforderlich und wird nicht zur Laufzeit benötigt.