Frage Import der PEM-Zertifikatskette und des Schlüssels in den Java-Keystore


Es gibt viele Quellen zu diesem Thema, aber keine, die diesen etwas besonderen Fall abdecken.

Ich habe 4 Dateien;

  • privatekey.pem
  • Zertifikat.pem
  • intermediate_rapidssl.pem
  • ca_geotrust_global.pem

Und ich möchte sie in einen neuen Keystore importieren.

Einige Websites empfehlen, das DER-Format zu verwenden und sie einzeln zu importieren. Dies ist jedoch fehlgeschlagen, weil der Schlüssel nicht erkannt wird.

Eine andere Seite schlug eine spezielle "ImportKey" -Klasse vor, die für den Import ausgeführt werden sollte, und das funktionierte, bis ich sah, dass die Kette kaputt ist. I.e. die Kettenlänge auf dem Zertifikat ist 1, das Zwischenprodukt und ca. ignoriert.

Einige Seiten schlagen PKCS7 vor, aber ich kann nicht einmal eine Kette davon bekommen. Andere schlagen PKCS12-Format vor, aber so weit meine Tests gehen, ist das auch gescheitert, um die gesamte Kette zu bekommen.

Jeder Rat oder Hinweise sind sehr willkommen.


26
2018-02-28 16:17


Ursprung




Antworten:


Das mag nicht perfekt sein, aber ich hatte einige Notizen über meine Verwendung von keytool das ich für dein Szenario modifiziert habe.

  1. Importieren Sie ein Stamm- oder Zwischenzertifizierungsstellen-Zertifikat in einen vorhandenen Java-Keystore:

    keytool -import -trustcacerts -alias root -file ca_geotrust_global.pem -keystore yourkeystore.jks
    keytool -import -trustcacerts -alias root -file intermediate_rapidssl.pem -keystore yourkeystore.jks 
    
  2. Kombinieren Sie das Zertifikat und den privaten Schlüssel vor dem Importieren in eine Datei.

    cat certificate.pem privatekey.pem > combined.pem
    

    Dies sollte zu einer Datei führen, die dem folgenden Format ähnelt.

    BEGINN ZERTIFIKAT
      ...
      ENDE ZERTIFIKAT
      BEGIN RSA PRIVATSCHLÜSSEL
      ...
      END RSA PRIVATE SCHLÜSSEL

  3. Importieren Sie ein signiertes primäres Zertifikat und einen Schlüssel in einen vorhandenen Java-Keystore:

    keytool -import -trustcacerts -alias yourdomain -file combined.pem -keystore yourkeystore.jks
    

22
2018-02-28 17:38



Mit welcher Version von Keytool können Sie so ketten? Diese Syntax gibt "keytool error: java.lang.Exception: Zertifikat nicht importiert, alias <root> existiert bereits" mit -import und -importcert - ctpenrose
Schwer zu sagen, genau. Aber angesichts des Jahres / des Monats war es wahrscheinlich Java 6? (Keine Ahnung, die Nebenversion.) Welche Version verwenden Sie? Der Fehler liest sich wie das Problem könnte mit dem Schlüsselspeicher selbst sein. (alias <root> already exists) Können Sie es mit einem neuen, leeren Keystore versuchen? - Aaron Copley
Keytool lässt mich kein Zertifikat mit einem bereits vorhandenen Alias ​​'root' importieren. Aber ich denke, es war ein Tippfehler. Interessant ist, dass keytool eine Kette für Ihr Zertifikat selbst erstellt, wenn es die Zertifikate der Unterzeichner im Keystore (unter jedem Alias) findet. Java-Werkzeug "Portecle" ist praktisch, um den Java Keystore zu verwalten. - Houtman
Keytool funktioniert nicht so und erlaubt Ihnen nicht, ein Alias ​​mehr als einmal wie beschrieben zu importieren. (Und ja, ich habe es versucht). Siehe unten die Antwort von senajqerib für etwas, das richtig funktioniert. - Steve Sether
Es ist eine drei Jahre alte Antwort. Es ist durchaus möglich, dass sich die Dinge geändert haben, aber ich versichere Ihnen, dass es funktionierte (oder kurz davor zu arbeiten, wie ich anmerkte, dass es vielleicht nicht perfekt ist), Stand Feb. 2013. Bitte zögern Sie nicht, eine Änderung einzureichen oder für die Aufmerksamkeit des Moderators zu markieren. - Aaron Copley


Verketten Sie alle * .pem-Dateien in einer PEM-Datei wie all.pem Erstellen Sie dann den Keystore im p12-Format mit dem privaten Schlüssel + all.pem

openssl pkcs12 -export -inkey private.key -in all.pem -name test -out test.p12

Dann exportiere p12 in jks

keytool -importkeystore -srckeystore test.p12 -srcstoretype pkcs12 -destkeystore test.jks

38
2017-12-24 13:51



Vielen Dank. Dies ist die einzige vollständige und korrekte Antwort. Wie Sie vorgeschlagen haben, ist es viel einfacher, die Zertifikate in eine Datei zu verketten. - Steve Sether
Dies funktionierte wie ein Leckerbissen für mich !! Ich habe diese Anweisungen verwendet, um eine Kette von Schlüsseln zu konvertieren, die im Repository für ein selbstsigniertes Zertifikat-Beispiel verwendet werden, um mit einem Java-basierten TLS-Server zu kommunizieren. Tausend Dank! - Galder Zamarreño
Dies ist die richtige Antwort. - sfThomas


keytool bietet keine Möglichkeit, Zertifikat + privaten Schlüssel aus einer einzelnen (kombinierten) Datei zu importieren, wie oben vorgeschlagen. Es läuft gut, aber nur das Zertifikat wird importiert, während der private Schlüssel ignoriert wird. Sie können es überprüfen keytool -list -v -keystore yourkeystore.jks - Ihr Eintragstyp ist TrustedCertEntry, nicht PrivateKeyEntry.

Um das anfängliche Problem zu lösen, sollte man zunächst einen PKCS # 12 Keystore mit openssl (oder einem ähnlichen Tool) erstellen und dann den Keystore mit importieren keytool -importkeystore.


7
2017-11-17 11:40