Wie kann ich einen Keystore aus vorhandenen Zertifikats- (abc.crt) und abc.key-Dateien erstellen?

75

Ich versuche, ein Zertifikat und eine Schlüsseldatei in den Keystore zu importieren, kann dies jedoch nicht.

Wie kann ich einen Schlüsselspeicher erstellen, indem ich sowohl ein vorhandenes Zertifikat (abc.crt) als auch abc.key-Dateien importiere?

Ravi Jain
quelle

Antworten:

130

Am einfachsten ist es wahrscheinlich, eine PKCS # 12-Datei mit OpenSSL zu erstellen:

openssl pkcs12 -export -in abc.crt -inkey abc.key -out abc.p12

Sie sollten in der Lage sein, die resultierende Datei direkt mit dem PKCS12Keystore-Typ zu verwenden.

Wenn Sie es wirklich brauchen, können Sie es mit keytool -importkeystore(verfügbar in keytoolJava 6) in JKS konvertieren :

keytool -importkeystore -srckeystore abc.p12 \
        -srcstoretype PKCS12 \
        -destkeystore abc.jks \
        -deststoretype JKS
Bruno
quelle
Danke Bruno, können Sie mir bitte mitteilen, woher ich das Dienstprogramm openssl bekomme?
Ravi Jain
1
Noch eine Frage: Ist die generierte Keystore-Plattform spezifisch? Bedeutet das, dass es funktioniert, wenn ich einen Keystore in Windows erstelle und ihn unter Unix verwende?
Ravi Jain
1
Der generierte Keystore ist plattformunabhängig. OSX und die meisten Linux-Distributionen sollten mit OpenSSL geliefert werden (andernfalls installieren Sie einfach das Paket). Es gibt auch Binärdateien für Windows ( hier zum Beispiel, obwohl Sie wahrscheinlich auch andere Orte finden können.)
Bruno
1
Ich sollte auch darauf hinweisen, dass bei einem PKCS12Keystore das Schlüsselkennwort mit dem Kennwort des Geschäfts identisch ist (während sie sich insbesondere für andere Arten von Geschäften unterscheiden können JKS).
Bruno
3
@HenningMakholm, es ist möglich, dass Ihre private Schlüsseldatei nicht kennwortgeschützt ist. Sie müssen eine einrichten, wenn Sie die PKCS # 12-Datei erstellen.
Bruno
38

Sie müssen OpenSSL und Keytool verwenden.

OpenSSL für CER & PVK-Datei> P12

openssl pkcs12 -export -name servercert -in selfsignedcert.crt -inkey serverprivatekey.key -out myp12keystore.p12

Keytool für p12> JKS

keytool -importkeystore -destkeystore mykeystore.jks -srckeystore myp12keystore.p12 -srcstoretype pkcs12 -alias servercert

SA
quelle
4
Wo ist der private Schlüssel?
Sequoya
1
das verstehe ich nicht !!
Sequoya
1
Wie unterscheidet sich das von der anderen früheren Antwort?
Wikingersteve
Vielen Dank. Ich habe s pkcs # 7 Zertifikat. Sollte ich pkcs12 oder 7 verwenden müssen?
Abel Jojo
Bitte beachten Sie die Optionen, die wir übergeben -name (für PKCS) -alias (für Jks).
Vijayanand
1

Zusätzlich zur Antwort von @ Bruno müssen Sie den -namefor-Alias ​​angeben, da sonst Tomcat einen Alias name tomcat does not identify a key entryFehler auslöst

Beispielbefehl: openssl pkcs12 -export -in localhost.crt -inkey localhost.key -out localhost.p12 -name localhost

MK Yung
quelle
1

Hinzufügen zu @MK Yung und @ Brunos Antwort. Geben Sie ein Passwort für den Zielschlüsselspeicher ein. Ich sah meine Konsole hängen, als ich den Befehl ohne Passwort eingab.

openssl pkcs12 -export -in abc.crt -inkey abc.key -out abc.p12 -name localhost  -passout pass:changeit
Swarna
quelle
0

Wenn der Keystore für Tomcat bestimmt ist, müssen Sie nach dem Erstellen des Keystores mit den obigen Antworten einen letzten Schritt hinzufügen, um den Alias ​​"Tomcat" für den Schlüssel zu erstellen:

keytool -changealias -alias "1" -destalias "tomcat" -keystore keystore-file.jks

Sie können das Ergebnis überprüfen mit:

keytool -list -keystore keystore-file.jks -v
Das Ö
quelle