Nicht ändern können Sie die keystore-format
Ich versuche, mich einige keystores mit keytool
aus der neuesten JRE (version 1.8.0_151). Wenn ich den keystore mit diesem Befehl keytool -genkey -alias serverprivate -keystore server.private -keyalg rsa -storepass apassword -keypass apassword
zeigt er mir diese Warnung:
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate
to PKCS12 which is an industry standard format using "keytool
-importkeystore -srckeystore server.private -destkeystore server.private
-deststoretype pkcs12".
Also habe ich den Befehl eingeben, und es sagt es ist fertig, und die alten keystore gespeichert wurde, im server.private_old. Aber wenn ich keytool -list -keystore server.private
und geben Sie das Kennwort ein, es wird noch aufgeführt, wie JKS statt PKCS12. Warum ist das so?
update
Es ist nicht leise geändert, um pkcs12-entweder, weil wenn ich KeyStore store = KeyStore.getInstance("pkcs12");
in java wirft es einen Fehler, während es funktioniert gut, wenn mit getInstance("JKS");
update 2
Und bei der Verwendung von keytool -genkey -alias serverprivate -keystore server.private -storetype PKCS12 -keyalg rsa
es nicht zeigen Sie mir eine Warnung, aber immer noch als einen JKS-keystore bei der Verwendung keytool -list server.private
.
file <keystore_name.ext>
? Hmm, der Letzte Satz war veraltet, bevor ich kann es mit dem update 🙂Ich würde empfehlen die Verwendung des
.jks
und .p12
Dateinamenerweiterungen, die durch die Art und Weise.immer noch in der Liste als JKS, auch beim Wechsel Erweiterung p12
OK, das beginnt, sieht aus wie ein bug. Beachten Sie, dass Java 9 verwendet .p12 als Standard, so dass es könnte ein Problem sein, Zurückportieren. Aber konnte Sie bewegen, Ihre
-deststoretype
Argumente für das starten des Befehls, nur um sicher zu sein? Welche Inhalte sind in den keystore, etwas vielleicht, dass Java 8 nicht unterstützt, wie die privaten Schlüssel ohne Zertifikate?Der neue keystore wirklich ist PKCS12. Der Fehler ist, dass keytool sagt es ist jks. Um dies zu überprüfen, können Sie analysieren es mit openssl:
openssl pkcs12 -in server.private
InformationsquelleAutor Conner Dassen | 2017-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint ein Fehler zu sein in dem, was keytool angezeigt, sondern als das, was es tut. Betrachten Sie die folgenden Experimente.
(EDIT: bug report eingereicht)
Erste, mein jdk-version ist 1.8.0_152:
Nun erstellen Sie die keystore-wie von Ihnen angegeben:
Nun, folgende Hinweise gegeben:
Aber wenn wir die Liste mit keytool, es sagt noch JKS.
Jedoch openssl Parsen kann es als pkcs12-einfach nur gut.
sowie die folgende Java-snippet kann auch analysiert werden.
und der Ausgang ist
keytool
wenn ich abschaltenkeystore.type.compat
im JRE/lib/security/java.Sicherheit . Auch eine sehr subtile Unterscheidungsmerkmal sogar mit dem compat Schlamassel auf: wenn ichkeystore -list
und drücken Sie die EINGABETASTE, wenn Sie dazu aufgefordert werden für storepass, für JKS enthält die Liste cert-fingerprint(s), aber für P12 tut es nicht, weil JKS-Shops certs im klaren, aber die meisten Implementierungen von P12 einschließlich JCE 'verschlüsseln' die certbag mit einfach-gebrochen RC2-40 (das ist dumm, aber jeder tut es).Mein erste Kommentar unter der Frage angegeben, die
file
Befehl enthalten ist, ist in den meisten Posix-Systemen (linux, apple, cygwin usw.) die Sie auch verwenden können, um sicherzustellen, dass die Datei-Typ. Gut zu wissen, suchen für bug-report, morgen.Ich nahm vor kurzem einen Blick in diese wieder, aber wenn ich call-pkcs12.load () - es wirft diese Fehlermeldung:
java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
, während es funktioniert gut, wenn ichKeyStore.getInstance("JKS");
InformationsquelleAutor James K Polk