Java Keytool Essentials: Arbeiten mit Java-Keystores

Einführung

Java Keytool ist ein Schlüssel- und Zertifikatverwaltungstool, das zum Bearbeiten von Java-Keystores verwendet wird und in Java enthalten ist. Ein Java-Keystore ist ein Container für Autorisierungszertifikate oder Public-Key-Zertifikate und wird häufig von Java-basierten Anwendungen zur Verschlüsselung, Authentifizierung und Bereitstellung über HTTPS verwendet. Seine Einträge sind durch ein Keystore-Passwort geschützt. Ein Schlüsselspeichereintrag ist durch einen Alias gekennzeichnet und besteht aus Schlüsseln und Zertifikaten, die eine Vertrauenskette bilden.

Diese Anleitung im Cheat-Sheet-Stil enthält eine Kurzreferenz zu "+ keytool +" - Befehlen, die häufig bei der Arbeit mit Java-Keystores hilfreich sind. Dies umfasst das Erstellen und Ändern von Java-Keystores, damit diese mit Ihren Java-Anwendungen verwendet werden können.

  • Verwendung dieses Handbuchs: *

  • Wenn Sie nicht mit CSRs (Certificate Signing Requests) vertraut sind, lesen Sie den CSR-Abschnitt unter https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and -csrs / [OpenSSL Spickzettel]

  • Diese Anleitung ist in einem einfachen Spickzettelformat und enthält Befehlszeilenschnipsel

  • Wechseln Sie zu einem Abschnitt, der für die Aufgabe, die Sie ausführen möchten, relevant ist. (Hinweis: Verwenden Sie das Menü Contents unten links oder die Funktion Find Ihres Browsers.)

  • Bei den meisten Befehlen handelt es sich um einzeilige Befehle, die aus Gründen der Übersichtlichkeit (unter Verwendung des Symbols "+ \ +") zu mehreren Zeilen erweitert wurden

Erstellen und Importieren von Keystore-Einträgen

Dieser Abschnitt behandelt Java Keytool-Befehle, die sich auf das Generieren von Schlüsselpaaren und Zertifikaten sowie das Importieren von Zertifikaten beziehen.

Generieren Sie Schlüssel im neuen / vorhandenen Keystore

Verwenden Sie diese Methode, wenn Sie HTTP (HTTP over TLS) zum Sichern Ihrer Java-Anwendung verwenden möchten. Dadurch wird ein neues Schlüsselpaar in einem neuen oder vorhandenen Java-Keystore erstellt, mit dem eine CSR erstellt und ein SSL-Zertifikat von einer Zertifizierungsstelle abgerufen werden kann.

Dieser Befehl generiert ein 2048-Bit-RSA-Schlüsselpaar unter dem angegebenen Alias ​​(+ domain +) in der angegebenen Keystore-Datei (+ keystore.jks +):

keytool -genkeypair \
       -alias  \
       -keyalg RSA \
       -keystore

Wenn der angegebene Schlüsselspeicher noch nicht vorhanden ist, wird er erstellt, nachdem die angeforderten Informationen bereitgestellt wurden. Dies fordert Sie zur Eingabe des Keystore-Kennworts (neu oder vorhanden) auf, gefolgt von der Aufforderung "Distinguished Name" (für den privaten Schlüssel) und dem gewünschten Kennwort für den privaten Schlüssel.

CSR für vorhandenen privaten Schlüssel generieren

Verwenden Sie diese Methode, wenn Sie eine CSR generieren möchten, die Sie an eine Zertifizierungsstelle senden können, um die Ausstellung eines von einer Zertifizierungsstelle signierten SSL-Zertifikats anzufordern. Voraussetzung ist, dass der Keystore und der Alias ​​bereits vorhanden sind. Sie können den vorherigen Befehl verwenden, um dies sicherzustellen.

Dieser Befehl erstellt eine CSR (+ domain.csr +), die mit dem privaten Schlüssel signiert ist, der durch den Alias ​​(+ domain +) im Keystore (+ keystore.jks +) gekennzeichnet ist:

keytool -certreq \
       -alias  \
       -file  \
       -keystore

Nach Eingabe des Kennworts für den Keystore wird die CSR generiert.

Signiertes / Root / Intermediate Zertifikat importieren

Verwenden Sie diese Methode, wenn Sie ein signiertes Zertifikat importieren möchten, z. ein von einer Zertifizierungsstelle in Ihrem Keystore signiertes Zertifikat; Es muss mit dem privaten Schlüssel übereinstimmen, der im angegebenen Alias ​​vorhanden ist. Sie können denselben Befehl auch zum Importieren von root - oder intermediate -Zertifikaten verwenden, die Ihre Zertifizierungsstelle möglicherweise benötigt, um eine Vertrauenskette abzuschließen. Geben Sie einfach einen eindeutigen Alias ​​an, z. B. "+ root" anstelle von "+ domain", und das Zertifikat, das Sie importieren möchten.

Dieser Befehl importiert das Zertifikat (+ domain.crt +) unter dem angegebenen Alias ​​(+ domain +) in den Schlüsselspeicher (+ keystore.jks +). Wenn Sie ein signiertes Zertifikat importieren, muss es dem privaten Schlüssel im angegebenen Alias ​​entsprechen:

keytool -importcert \
       -trustcacerts -file  \
       -alias  \
       -keystore

Sie werden aufgefordert, das Kennwort für den Keystore einzugeben und anschließend die Importaktion zu bestätigen.

  • Hinweis: * Sie können den Befehl auch verwenden, um die Zertifikate einer Zertifizierungsstelle in Ihren Java-Truststore zu importieren. Dieser befindet sich normalerweise in "+ $ JAVA_HOME / jre / lib / security / cacerts ", vorausgesetzt, " $ JAVA_HOME +" ist Ihr JRE oder JDK ist installiert.

Generieren Sie ein selbstsigniertes Zertifikat im neuen / vorhandenen Keystore

Verwenden Sie diesen Befehl, wenn Sie ein selbstsigniertes Zertifikat für Ihre Java-Anwendungen generieren möchten. Dies ist derselbe Befehl, der zum Erstellen eines neuen Schlüsselpaars verwendet wird, jedoch mit der in Tagen angegebenen Gültigkeitsdauer.

Dieser Befehl generiert ein 2048-Bit-RSA-Schlüsselpaar mit einer Gültigkeit von + 365 + Tagen unter dem angegebenen Alias ​​(+ domain +) in der angegebenen Keystore-Datei (+ keystore.jks +):

keytool -genkey \
       -alias  \
       -keyalg RSA \
       -validity  \
       -keystore

Wenn der angegebene Schlüsselspeicher noch nicht vorhanden ist, wird er erstellt, nachdem die angeforderten Informationen bereitgestellt wurden. Dies fordert Sie zur Eingabe des Keystore-Kennworts (neu oder vorhanden) auf, gefolgt von der Aufforderung "Distinguished Name" (für den privaten Schlüssel) und dem gewünschten Kennwort für den privaten Schlüssel.

Anzeigen von Keystore-Einträgen

In diesem Abschnitt wird der Inhalt eines Java-Keystores aufgeführt, z. B. das Anzeigen von Zertifikatinformationen oder das Exportieren von Zertifikaten.

Liste der Fingerabdrücke des Keystore-Zertifikats

Dieser Befehl listet die SHA-Fingerabdrücke aller Zertifikate im Keystore (+ keystore.jks +) unter ihren jeweiligen Aliasnamen auf:

keytool -list \
       -keystore

Sie werden aufgefordert, das Kennwort für den Keystore einzugeben. Sie können die Ausgabe auch auf einen bestimmten Alias ​​beschränken, indem Sie die Option "+ -alias domain" verwenden, wobei "domain" der Aliasname ist.

Auflisten von ausführlichen Keystore-Inhalten

Dieser Befehl listet ausführliche Informationen zu den Einträgen in einem Keystore (+ keystore.jks +) auf, einschließlich der Länge der Zertifikatskette, des Fingerabdrucks der Zertifikate in der Kette, der definierten Namen, der Seriennummer und des Erstellungs- / Ablaufdatums unter ihren jeweiligen Aliasnamen:

keytool -list -v \
       -keystore

Sie werden aufgefordert, das Kennwort für den Keystore einzugeben. Sie können die Ausgabe auch auf einen bestimmten Alias ​​beschränken, indem Sie die Option "+ -alias domain" verwenden, wobei "domain" der Aliasname ist.

  • Hinweis: * Mit diesem Befehl können Sie auch anzeigen, welche Zertifikate sich in Ihrem Java-Truststore befinden. Dieser befindet sich normalerweise in + $ JAVA_HOME / jre / lib / security / cacerts +, vorausgesetzt, + $ JAVA_HOME + befindet sich in Ihrem JRE oder JDK ist installiert.

Verwenden Sie Keytool, um Zertifikatinformationen anzuzeigen

Dieser Befehl gibt ausführliche Informationen zu einer Zertifikatsdatei (+ certificate.crt +) aus, einschließlich der Fingerabdrücke, des definierten Namens des Eigentümers und des Ausstellers sowie des Gültigkeitszeitraums:

keytool -printcert \
       -file

Sie werden aufgefordert, das Kennwort für den Keystore einzugeben.

Zertifikat exportieren

Dieser Befehl exportiert ein binäres DER-codiertes Zertifikat ("+ domain.der "), das dem Alias ​​(" domain ") im Keystore (" keystore.jks +") zugeordnet ist:

keytool -exportcert
       -alias
       -file
       -keystore

Sie werden aufgefordert, das Kennwort für den Keystore einzugeben. Wenn Sie das DER-codierte Zertifikat in PEM-Codierung konvertieren möchten, folgen Sie unseren https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs # Zertifikatsformate konvertieren [OpenSSL-Spickzettel].

Ändern des Schlüsselspeichers

In diesem Abschnitt wird die Änderung von Java Keystore-Einträgen behandelt, z. B. das Löschen oder Umbenennen von Aliasnamen.

Ändern Sie das Keystore-Passwort

Dieser Befehl wird verwendet, um das Kennwort eines Schlüsselspeichers zu ändern (+ keystore.jks +):

keytool -storepasswd \
       -keystore

Sie werden aufgefordert, das aktuelle Kennwort und anschließend das neue Kennwort einzugeben. Sie können das neue Passwort im Befehl auch mit der Option "+ -new newpass +" angeben, wobei "newpass" das Passwort ist.

Alias ​​löschen

Mit diesem Befehl wird ein Alias ​​("+ domain") in einem Keystore ("+ keystore.jks") gelöscht:

keytool -delete \
       -alias domain \
       -keystore

Sie werden aufgefordert, das Kennwort für den Keystore einzugeben.

Alias ​​umbenennen

Dieser Befehl benennt den Alias ​​(+ domain +) in den Zielalias (+ new domain) im Keystore (` + keystore.jks`) um:

keytool -changealias \
       -alias  \
       -destalias  \
       -keystore

Sie werden aufgefordert, das Kennwort für den Keystore einzugeben.

Fazit

Das sollte abdecken, wie die meisten Leute Java Keytool verwenden, um ihre Java-Keystores zu manipulieren. Es hat viele andere Verwendungszwecke, die hier nicht behandelt wurden. Sie können also gerne andere Verwendungszwecke in den Kommentaren erfragen oder vorschlagen.

Dieses Lernprogramm basiert auf der Version von Keystore, die im Lieferumfang von Java 1.7.0 Update 65 enthalten ist. Weitere Informationen zum Installieren von Java unter Ubuntu finden Sie unter this guide.