Wenn ich java.security
mir die Datei von my JRE
ansehe, sehe ich, dass der standardmäßig zu verwendende Keystore-Typ auf eingestellt ist JKS
. Hier gibt es eine Liste der Keystore-Typen, die verwendet werden können.
Gibt es einen empfohlenen Keystore-Typ? Was sind die Vor- und Nachteile der verschiedenen Keystore-Typen?
Antworten:
Es gibt ein paar mehr Typen als in der Standardnamenliste aufgeführt, mit der Sie verknüpft sind. Weitere Informationen finden Sie in der Dokumentation zu kryptografischen Anbietern . Die häufigsten sind sicherlich
JKS
(die Standardeinstellung) undPKCS12
(für PKCS # 12-Dateien, oft mit Erweiterung.p12
oder manchmal.pfx
).JKS ist am häufigsten, wenn Sie in der Java-Welt bleiben. PKCS # 12 ist nicht Java-spezifisch. Es ist besonders praktisch, Zertifikate (mit privaten Schlüsseln) zu verwenden, die von einem Browser gesichert wurden oder von OpenSSL-basierten Tools stammen (
keytool
ein Schlüsselspeicher konnte nicht konvertiert und seine privaten Schlüssel vor Java 6 importiert werden) , also musste man andere Werkzeuge verwenden).Wenn Sie bereits eine PKCS # 12-Datei haben, ist es oft einfacher, den
PKCS12
Typ direkt zu verwenden. Es ist möglich, Formate zu konvertieren, aber es ist selten erforderlich, wenn Sie den Keystore-Typ direkt auswählen können.In Java 7
PKCS12
war es hauptsächlich als Keystore nützlich, aber weniger als Truststore (siehe den Unterschied zwischen einem Keystore und einem Truststore ), da Sie Zertifikatseinträge ohne einen privaten Schlüssel nicht speichern konnten. Im Gegensatz dazuJKS
muss nicht jeder Eintrag ein privater Schlüsseleintrag sein, sodass Sie Einträge haben können, die nur Zertifikate enthalten. Dies ist nützlich für Trust Stores, in denen Sie die Liste der Zertifikate speichern, denen Sie vertrauen (aber Sie haben keine privater Schlüssel für sie).Dies hat sich in Java 8 geändert, sodass Sie jetzt auch Einträge nur für Zertifikate in
PKCS12
Geschäften haben können. (Weitere Details zu diesen Änderungen und weiteren Plänen finden Sie in JEP 229: Standardmäßig PKCS12-Keystores erstellen .)Es gibt einige andere Keystore-Typen, die möglicherweise (je nach Kontext) weniger häufig verwendet werden. Dazu gehören:
PKCS11
Für PKCS # 11-Bibliotheken, normalerweise für den Zugriff auf kryptografische Hardware-Token. Die Sun-Provider-Implementierung unterstützt jedoch auch NSS-Stores (von Mozilla).BKS
mit dem BouncyCastle-Anbieter (häufig für Android verwendet).Windows-MY
/Windows-ROOT
, wenn Sie direkt auf den Windows-Zertifikatspeicher zugreifen möchten.KeychainStore
, wenn Sie den OSX-Schlüsselbund direkt verwenden möchten.quelle
KeyStore
Implementierung schreiben ). Sie können sie jedoch im laufenden Betrieb mit einerCertificateFactory
(wie in dieser Antwort gezeigt ) in eine Keystore-Instanz (normalerweise JKS, der Standardtyp) im Speicher laden .JKS
hat sich geändert zuJCEKS
In diesem Beitrag werden verschiedene Arten von Keystores in Java und die Unterschiede zwischen verschiedenen Arten von Keystores vorgestellt. http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java----Overview
Nachfolgend finden Sie die Beschreibungen der verschiedenen Schlüsselspeicher aus dem Beitrag:
quelle
Wenn Sie Java 8 oder höher verwenden, sollten Sie auf jeden Fall
PKCS12
die Standardeinstellung seit Java 9 ( JEP 229 ) wählen .Die Vorteile gegenüber
JKS
undJCEKS
sind:PKCS12
ist ein Standardformat, es kann von anderen Programmen und Bibliotheken gelesen werden 1JKS
undJCEKS
sind ziemlich unsicher. Dies lässt sich an der Anzahl der Tools zum brutalen Erzwingen von Kennwörtern dieser Keystore-Typen ablesen, die besonders bei Android-Entwicklern beliebt sind. 2, 31 Es gibt JDK-8202837 , das in Java 11 behoben wurde
2 Die Iterationszahl für PBE, die von allen Keystore-Typen (einschließlich PKCS12) verwendet wurde, war früher eher wöchentlich ( CVE-2017-10356 ), wurde jedoch in 9.0.1, 8u151, 7u161 und 6u171 behoben
3 Zur weiteren Lektüre:
quelle