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.

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:
- Angabe des Ordners zum ablegen der verschlüsselten Dateien
- Angabe der Keystore URL (Pfad zu unserem vorher angelegten Keystore)
- Angabe des Passworts für den Keystore
- Angabe des zu verwendenden Salt (8 Zeichen)
- 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.

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.

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.
Du muss angemeldet sein, um einen Kommentar zu veröffentlichen.