HOWTO · Java

Standardkennwort für Java-Keystore

Dieses Tutorial führt Sie durch die Schritte zum Ändern des Kennworts für Ihren Java-Keystore.

Auf dieser Seite

Java-Anwendungen schützen kryptografische Schlüssel und Zertifikate in einem Keystore, und jeder Keystore ist durch ein Kennwort geschützt. Das mit dem Truststore des JDK ausgelieferte Standardkennwort für den Java-Keystore ist changeit. Da dieser Wert öffentlich dokumentiert ist, eignet er sich nicht für einen Keystore, der echten Schutz benötigt.

In diesem Tutorial erfahren Sie, was ein Java-Keystore ist, wie Sie sein Kennwort mit dem Befehlszeilenprogramm keytool ändern und wie Sie überprüfen, ob das neue Kennwort funktioniert.

Was ist ein Java-Keystore?

Ein Java-Keystore ist eine Datei, die kryptografisches Material speichert: private Schlüssel samt ihren Zertifikatsketten sowie vertrauenswürdige öffentliche Zertifikate. Java-Keystores gibt es in mehreren Formaten – JKS und PKCS12 sind am verbreitetsten – und keytool, das zum Java Development Kit (JDK) gehört, kann sie lesen und schreiben.

Das JDK enthält einen Truststore namens cacerts, der die Zertifizierungsstellen enthält, denen Java standardmäßig vertraut. Sein Speicherort hängt von Ihrer Java-Installation ab: JDK 8 legt ihn unter jre/lib/security ab, während neuere JDKs ihn unter lib/security innerhalb von JAVA_HOME speichern. Für eine bestimmte Anwendung erstellte Keystores können sich an einer beliebigen Stelle auf der Festplatte befinden. Prüfen Sie daher immer, welche Datei eine Anwendung tatsächlich lädt, bevor Sie ihr Kennwort ändern.

Was ist das Standardkennwort für den Java-Keystore?

Das Standardkennwort für den cacerts-Truststore des JDK ist changeit. Es ist eine weithin bekannte Konvention – und genau deshalb ein schwacher Schutz: Jeder, der mit Java vertraut ist, kann einen Keystore öffnen oder verändern, der es noch verwendet.

Bedenken Sie, dass changeit für die mitgelieferte cacerts-Datei gilt. Ein von Ihnen oder Ihrer Organisation erstellter Keystore hat das bei der Erstellung gewählte Kennwort. Für ein vergessenes benutzerdefiniertes Kennwort gibt es keinen Wiederherstellungsmechanismus – bewahren Sie es an einem sicheren Ort auf.

Keystore-Kennwort mit keytool ändern

Ändern Sie das Kennwort eines Keystores mit keytool -storepasswd. Für einen echten Keystore führen Sie den Befehl interaktiv aus – keytool -storepasswd -keystore /path/to/keystore.jks, wobei Sie /path/to/keystore.jks durch die tatsächliche Datei ersetzen –, damit die Geheimnisse an Eingabeaufforderungen eingegeben werden und nicht im Shell-Verlauf auftauchen. keytool fragt zunächst mit Enter keystore password: nach dem aktuellen Kennwort (changeit bei einer unveränderten cacerts-Datei) und verlangt das neue Kennwort anschließend zweimal mit New keystore password: und Re-enter new password:.

Einige Details sind wichtig:

  • Setzen Sie -keystore auf genau die Datei, die die Anwendung lädt. Gehen Sie nicht von einem festen Pfad JAVA_HOME/jre/lib/security/cacerts aus, da sich die Verzeichnisstruktur zwischen JDK-Versionen und -Distributionen unterscheidet.
  • Die Optionen -storepass und -new nehmen das aktuelle und das neue Kennwort für die nicht interaktive Verwendung als Befehlsargumente entgegen. Dadurch erscheinen sie im Shell-Verlauf und in Prozesslisten; verwenden Sie sie daher nur für Wegwerfdateien oder in abgesicherter Automatisierung.
  • Die interaktive Form wartet auf eingegebene Werte. Das folgende Skript führt daher denselben -storepasswd-Vorgang unbeaufsichtigt auf einer Wegwerfdatei aus, die aus einem einmalig verwendeten selbstsignierten Zertifikat erstellt wurde.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

set -e
TMP="$(mktemp -d)"
cat > "$TMP/demo.crt" <<'PEM'
-----BEGIN CERTIFICATE-----
MIIC/zCCAeegAwIBAgIUa9tUIt8iYx/aaMtcdywj4SboyakwDQYJKoZIhvcNAQEL
BQAwDzENMAsGA1UEAwwEZGVtbzAeFw0yNjEwMzAxMjIyMjRaFw0zNjEwMjcxMjIy
MjRaMA8xDTALBgNVBAMMBGRlbW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCsMo66EXV3Ic75iT7RamlTZYn3RkhqEAKYHNLDe1pIf4ovN0tDhoP1Ce99
BtP6UNLds86BLB9S9n+LHwOsdu5NxerqXGLY3+6n3LpQRy+nH1iCO+j+W51xhqN7
JCpu7ckwCGd1lWcFFInIRhQ7oNsobbTI5NB+k84Kh+U5cyr5eYVCvbvROi/l5P0J
wyaggYOKn8l+33kmBOopXso2I7FRcSXLNYQkQBw/oCjikpdWR/RwtwLZuxssOP3Y
GsFZYVqPjkDt2WcUSuM+CoFFNudQXkI4V3OQTe4P5tFNATOV+uwmHFIKvcaEv9W5
/SckhD979tYNikl/9TzSmeqP8XdNAgMBAAGjUzBRMB0GA1UdDgQWBBQBwJRi578D
+rJwBEsFH2kk4q42/zAfBgNVHSMEGDAWgBQBwJRi578D+rJwBEsFH2kk4q42/zAP
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBspuqrqHp3p4TKiuZm
Rh0xsR2PTjP/IycwWwNXK0F7zUgvEIw49o3QSgaOBz1x+DDGYQ0mjUZo6WlJ2A6z
vaYp13E7y40maTxccMS3UEzkJx7A0p9JkbrK+HwBLHN85YUwn/A1BW197+9eJpET
ilivdUYGUfBzcNS4dwk8YjDCJmycy/5KqN8xp4jFX9NN0aHT28SkmYzMrXJS/6qV
bdS6KoKbZJ+4BGPSS4G2JthX8oD85Ve/6AquFX25FpIomUgW7u9f3TQXsgS/Y3mx
bnDIVFsuA+E23baxwOq+LfBUcGSWbtwnt+ftarRmebfiE/3GZQ7aim7xHgKQxtYe
7YVQ
-----END CERTIFICATE-----
PEM
keytool -importcert -alias demo -file "$TMP/demo.crt" \
  -storetype JKS -keystore "$TMP/demo.jks" \
  -storepass changeit -noprompt > /dev/null 2>&1
keytool -storepasswd -keystore "$TMP/demo.jks" -storetype JKS \
  -storepass changeit -new newStorePass1 2>/dev/null
echo "keystore password changed"
keystore password changed

Das Skript importiert das temporäre Zertifikat in einen neuen JKS-Keystore, dessen Ausgangspasswort changeit ist – wie beim tatsächlichen Standard – und ändert das Kennwort des Keystores anschließend ohne Eingabeaufforderungen auf newStorePass1. Der Import eines Zertifikats hält die Demonstration schnell und frei von Eingabeaufforderungen; bei Ihrem eigenen Keystore sollten Sie die oben beschriebenen interaktiven Eingabeaufforderungen verwenden.

Neues Keystore-Kennwort überprüfen

Überprüfen Sie die Änderung, indem Sie den Inhalt des Keystores mit dem neuen Kennwort auflisten: keytool -list -keystore /path/to/keystore.jks fordert mit Enter keystore password: zur Kennworteingabe auf und gibt den Keystore-Typ sowie seine Einträge aus, wenn das Kennwort richtig ist. Bei der nicht interaktiven Form wird das Kennwort mit -storepass übergeben.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

set -e
TMP="$(mktemp -d)"
cat > "$TMP/demo.crt" <<'PEM'
-----BEGIN CERTIFICATE-----
MIIC/zCCAeegAwIBAgIUa9tUIt8iYx/aaMtcdywj4SboyakwDQYJKoZIhvcNAQEL
BQAwDzENMAsGA1UEAwwEZGVtbzAeFw0yNjEwMzAxMjIyMjRaFw0zNjEwMjcxMjIy
MjRaMA8xDTALBgNVBAMMBGRlbW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCsMo66EXV3Ic75iT7RamlTZYn3RkhqEAKYHNLDe1pIf4ovN0tDhoP1Ce99
BtP6UNLds86BLB9S9n+LHwOsdu5NxerqXGLY3+6n3LpQRy+nH1iCO+j+W51xhqN7
JCpu7ckwCGd1lWcFFInIRhQ7oNsobbTI5NB+k84Kh+U5cyr5eYVCvbvROi/l5P0J
wyaggYOKn8l+33kmBOopXso2I7FRcSXLNYQkQBw/oCjikpdWR/RwtwLZuxssOP3Y
GsFZYVqPjkDt2WcUSuM+CoFFNudQXkI4V3OQTe4P5tFNATOV+uwmHFIKvcaEv9W5
/SckhD979tYNikl/9TzSmeqP8XdNAgMBAAGjUzBRMB0GA1UdDgQWBBQBwJRi578D
+rJwBEsFH2kk4q42/zAfBgNVHSMEGDAWgBQBwJRi578D+rJwBEsFH2kk4q42/zAP
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBspuqrqHp3p4TKiuZm
Rh0xsR2PTjP/IycwWwNXK0F7zUgvEIw49o3QSgaOBz1x+DDGYQ0mjUZo6WlJ2A6z
vaYp13E7y40maTxccMS3UEzkJx7A0p9JkbrK+HwBLHN85YUwn/A1BW197+9eJpET
ilivdUYGUfBzcNS4dwk8YjDCJmycy/5KqN8xp4jFX9NN0aHT28SkmYzMrXJS/6qV
bdS6KoKbZJ+4BGPSS4G2JthX8oD85Ve/6AquFX25FpIomUgW7u9f3TQXsgS/Y3mx
bnDIVFsuA+E23baxwOq+LfBUcGSWbtwnt+ftarRmebfiE/3GZQ7aim7xHgKQxtYe
7YVQ
-----END CERTIFICATE-----
PEM
keytool -importcert -alias demo -file "$TMP/demo.crt" \
  -storetype JKS -keystore "$TMP/demo.jks" \
  -storepass changeit -noprompt > /dev/null 2>&1
keytool -storepasswd -keystore "$TMP/demo.jks" -storetype JKS \
  -storepass changeit -new newStorePass1 2>/dev/null
keytool -list -keystore "$TMP/demo.jks" -storetype JKS \
  -storepass newStorePass1 > "$TMP/demo.list" 2>/dev/null
grep "keystore contains" "$TMP/demo.list"
Your keystore contains 1 entry

grep gibt die Zeile mit der Anzahl der Einträge aus der Keystore-Auflistung aus. Eine erfolgreiche Auflistung beweist, dass das neue Kennwort genau diese Datei öffnet; hätte keytool es abgelehnt, wäre der Befehl fehlgeschlagen. Sie beweist nicht, dass der Inhalt des Keystores Ihren Erwartungen entspricht oder dass die ihn verwendende Anwendung richtig konfiguriert ist. Behandeln Sie sie daher als Zugriffsprüfung, nicht als Sicherheitsaudit.

Wichtige Einschränkungen und Sicherheitsmaßnahmen

Die Änderung des Keystore-Kennworts ist ein Teil des Schutzes eines Keystores. Beachten Sie diese Punkte:

  • Verwenden Sie ein eindeutiges, schwer zu erratendes Geheimnis. Ein generierter Wert oder eine lange Passphrase ist besser als ein andernorts wiederverwendetes Muster. keytool akzeptiert kurze Kennwörter mit nur einer Warnung; das Erreichen dieses Minimums ist daher kein Sicherheitsziel.
  • Das Keystore-Kennwort ist nicht das Schlüsselkennwort. -storepasswd ändert nur das Kennwort, das den Speicher öffnet. Private-Schlüssel-Einträge haben eigene Kennwörter, die mit -keypasswd verwaltet werden. Einige Werkzeuge setzen voraus, dass beide übereinstimmen, während andere sie als getrennt behandeln – prüfen Sie Ihre Werkzeuge, bevor Sie eines ohne das andere ändern.
  • Schützen Sie die Datei, nicht nur das Kennwort. Bewahren Sie Sicherungskopien des Keystores an einem sicheren Ort auf, beschränken Sie die Dateisystemberechtigungen so, dass nur Konten mit Bedarf die Datei lesen können, und begrenzen Sie, wer keytool darauf ausführen darf.
  • Ändern Sie das Kennwort, wenn es einen Grund gibt. Ändern Sie es nach einer vermuteten Offenlegung oder bei Personalwechseln; eine Rotation nach festem Zeitplan ist nicht automatisch vorteilhaft.

Ein geändertes Kennwort allein macht eine Anwendung nicht sicher – kombinieren Sie es mit geschützten Sicherungskopien, strenger Zugriffskontrolle und einer ordnungsgemäßen Aufbewahrung des Geheimnisses selbst.