Asymmetrisch verschlüsselte Passwörter mit Java KeyStore (per Skript)
Statt alle Informationen für die Entschlüsselung im Passwort-Text selbst zu halten (siehe Obfuskation und PBE-Verschlüsselung), wird bei diesem Verfahren ein Schlüssel aus einem externen Java KeyStore verwendet. Das Verfahren ist hierbei asymmetrisch, z. B. RSA.
Die Sicherheit asymmetrisch verschlüsselter Passwörter ist hoch.
Einrichten des Java KeyStores
Sollte kein Java KeyStore vorhanden sein, kann dieser mit folgendem Befehl erzeugt werden. Der Ort des erzeugten Java KeyStores sollte in einem Verzeichnis sein, auf das nur der Benutzer Zugriff hat, der den Lobster-Integration-Prozess ausführt.
Hinweis: Hier wurde das Verzeichnis etc\admin (./etc/admin) verwendet, was das Standardverzeichnis für Konfigurationsdateien der weiteren Schritte ist. Es kann jedoch jedes andere, für den Zweck geeignete, Verzeichnis verwendet werden.
Hinweis: Verwenden Sie für das Beispiel das Keystore-Passwort my keystore password (später können Sie natürlich ein beliebiges wählen).
Hinweis: Sehen Sie im Beispiel ein leeres Eingabefeld, dann können Sie dieses ebenfalls leer lassen (Return drücken).
Hinweis: Die vom Skript ausgegebene Warnung können Sie ignorieren.
D:\IS>keytool -genkey -alias lobster -keyalg RSA -keysize 2048 -keystore etc\admin\pwd_ks.keystore
Keystore-Kennwort eingeben:
Neues Kennwort erneut eingeben:
Wie lautet Ihr Vor- und Nachname?
[Unknown]: Test Keystore for Config Password Encryption
Wie lautet der Name Ihrer organisatorischen Einheit?
[Unknown]: IT
Wie lautet der Name Ihrer Organisation?
[Unknown]: Lobster GmbH
Wie lautet der Name Ihrer Stadt oder Gemeinde?
[Unknown]:
Wie lautet der Name Ihres Bundeslands?
[Unknown]:
Wie lautet der Ländercode (zwei Buchstaben) für diese Einheit?
[Unknown]: DE
Ist CN=Test Keystore for Config Password Encryption, OU=IT, O=Lobster GmbH, L=Unknown, ST=Unknown, C=DE richtig?
[Nein]: ja
Schlüsselkennwort für <lobster> eingeben
(RETURN, wenn identisch mit Keystore-Kennwort):
Warning:
Der JKS-Keystore verwendet ein proprietäres Format. Es wird empfohlen, auf PKCS12 zu migrieren, das ein Industriestandardformat mit "keytool -importkeystore -srckeystore etc\admin\pwd_ks.keystore -destkeystore etc\admin\pwd_ks.keystore -deststoretype pkcs12" ist.
Als Ergebnis erhalten Sie die Keystore-Datei ./etc/admin/pwd_ks.keystore.
Konfigurationsdatei zur Passwort-Verschlüsselung mit dem Java KeyStore
Bei der Anlage des Java KeyStores wurde hier das Passwort my keystore password verwendet, womit der private Schlüssel des Java KeyStores gesichert wird. Dieses Passwort muss in der folgenden Konfigurationsdatei ./etc/admin/ks.properties hinterlegt werden.
keystore_lobster
keystore_lobster.filename=./etc/admin/pwd_ks.keystore
keystore_lobster.password=my keystore password
#keystore_lobster.type=JCEKS
#keystore_lobster.provider=BC
Passwort-Verschlüsselung mit dem Java KeyStore
Sind diese Vorarbeiten erledigt, können Sie nun ein asymmetrische verschlüsseltes Passwort erstellen.
D:\IS> bin\password.bat -k lobster "some password"
$KS$lobster$QUgjl4kFMzU9Zm0+4QXd5reP+GyHWpqION3vd4ZXBH6F90YWmZErS/V5ernNBBnHZCLzci+bbe3rVbIkCjTf1tI9Zmsv03DDb4JTjUbJ8G4l4hhhlpOUM+2/b+VvS2Nhb9vRJ29z7j2K+cBbzVQ7wEYOGIPi2Atv9Vpv1+zN2PheZZs9rqNEU3LgAMV9fsUOTkQUvyo23fhVxHXNJFxMubs369dU8+5yEX0U6wRPMeHIKS+OoEvt3APaXitZ+8NwYxmvdgukUdBs9AYKMQBN6YKEkGpKFojIboTWzFdBUpz5rUWWj+pQbPrxoJ33YlttjAxXwKbyeyEGw4CUV76asw==$2VXmZat8L5psiwlhX1AREw==
→ Der angezeigte $KS$-Wert kann hier direkt aus der Konsole herauskopiert und in die gewünschte Konfigurationsdatei als Passwort eingefügt werden.
Vorläufige Zusammenfassung:
Erzeugen des Java KeyStores (mit KeyStore-Passwort).
Erzeugen der Konfigurationsdatei für den Java KeyStore (mit Angabe des KeyStore-Passworts im Klartext).
Asymmetrische Verschlüsselung des Passworts für Ihre Konfigurationsdatei unter Verwendung des Skripts (welches den Java KeyStore und dessen Konfigurationsdatei verwendet).
Wichtiger Hinweis: Da es offensichtlich unsicher ist, hier das Passwort im Klartext anzugeben, kann Obfuskation bzw. PBE-Maskierung (mit Angabe des PBE-Passworts!) verwendet werden. Wie wir bereits gesehen haben, sind aber auch diese beiden Verfahren nicht besonders sicher. Deshalb empfehlen wir stattdessen die Verwendung eines Master-Passworts.
Verwendung eines Master-Passworts
Erzeugen der Master-Passwort-Konfigurationsdatei
Wir verwenden unser Skript, um die Datei zu erzeugen, die das Master-Passwort (my secret masterpassword) enthält.
D:\IS> bin\password.bat -j "my secret masterpassword" 2> etc\admin\ks_auth.properties
Als Ergebnis erhalten Sie die Master-Passwort-Datei ./etc/admin/ks_auth.properties. Wichtiger Hinweis: Die Datei muss vor unberechtigtem Lesezugriff geschützt sein, damit das Szenario als sicher zu bezeichnen ist!
Verschlüsseln des Java-KeyStore-Passworts
Bisher ist unser Java-KeyStore-Passwort (my keystore password) im Klartext in der Java-KeyStore-Konfigurationsdatei ./etc/admin/ks.properties eingetragen.
Der nächste Schritt ist daher das Verschlüsseln dieses Passworts mit dem PBE-Verfahren unter Verwendung unseres Master-Passworts (my secret masterpassword) ohne Ausgabe des Passwort-Teils (Option -jo).
D:\IS> bin\password.bat -jo "my keystore password" mysalt 57 "my secret masterpassword"
Als Ergebnis des Aufrufs erhalten wir:
$JB$MASK-S4x5hUiT4VqvQoY0ATPm70BvWS+s0TCY$bXlzYWx0$57$$ |
Dieses Passwort tragen wir nun statt des bisherigen Klartext-Passworts in die Java-KeyStore-Konfigurationsdatei ./etc/admin/ks.properties ein (Zeile 3).
keystore_lobster
keystore_lobster.filename=./etc/admin/pwd_ks.keystore
keystore_lobster.password=$JB$MASK-S4x5hUiT4VqvQoY0ATPm70BvWS+s0TCY$bXlzYWx0$57$$
#keystore_lobster.type=JCEKS
#keystore_lobster.provider=BC
Nun können wir erneut unser Skript verwenden, um unser Konfigurationsdatei-Passwort (some password) asymmetrisch zu verschlüsseln.
D:\IS> bin\password.bat -k lobster "some password"
$KS$lobster$VyZI+9Ywh6ISGR+5f4e/k550FxsT9/xefTaOJgorAQW9k4frNq4EeGeSI1Xd3O8vob6reoRRZADhWJJUXeD7fqpvGHJw84q8HiLs/5lqUt1p/hNr6BsByFMcVvY1lF2qD9Ltr9S6H94gT/p4Jqw2fnwVdS+NMWxJGqacNsUqaP7413jBPx0Kpmi4WuzdeP3k/CblyuF0ZjErKer9+rhuGqpdka8DIwZJ1wJCp7bO78Qy3mrN/q9s8u9N1IoaF5GJrtqOnCGXG0ZaA9mPF3/bJxPjMaOXRjpfbfI1V+bcdMQWfKP04sF5ot99rDlZ9xLLRRaY3l7uYGXDdKVUh3/uvA==$SMxzDLS2kKeRaHXOx8WQLg==
→ Der angezeigte $KS$-Wert kann hier direkt aus der Konsole herauskopiert und in die gewünschte Konfigurationsdatei als Passwort eingefügt werden.
Zusammenfassung:
Erzeugen des Java KeyStores (mit KeyStore-Passwort).
Erzeugen der Master-Passwort-Konfigurationsdatei.
Verschlüsseln des KeyStore-Passworts mit dem PBE-Verfahren und dem Master-Passwort.
Erzeugen der Konfigurationsdatei für den Java KeyStore (mit Angabe des PBE-verschlüsselten KeyStore-Passworts aus 3).
Asymmetrische Verschlüsselung des Passworts für Ihre Konfigurationsdatei unter Verwendung des Skripts (welches den Java KeyStore und dessen Konfigurationsdatei verwendet).
Zum Verständnis: Es wird also wie bisher die Java-KeyStore-Konfigurationsdatei herangezogen beim asymmetrischen Verschlüsseln unseres Konfigurationsdatei-Passworts (some password). Das KeyStore-Passwort ist nun aber nicht mehr im Klartext in der Java-KeyStore-Konfigurationsdatei angegeben, sondern wurde per PBE-Verfahren verschlüsselt (ohne Ausgabe des PBE-Passwort-Teils). Der PBE-Passwort-Teil wird aus der Master-Passwort-Datei gezogen (ebenfalls per PBE verschlüsselt).