Was ist der Unterschied zwischen einem Keystore und einem Truststore?
keystore
encryption-asymmetric
truststore
Rob Wright
quelle
quelle
TrustStore
per se . Oder ich konnte es nicht in den Java-Dokumenten finden (zum Beispieljava.security.TrustStore
). Wenn wir einer Zertifizierungsstelle vertrauen möchten, wird ihr über a vertrautKeyStore
(und dasKeyStore
wird an die übergebenTrustManagerFactory
).KeyStore.load(InputStream is, char[] password)
( docs ) ein Nullkennwort annehmen kann und dann Zugriff auf öffentliche Zertifikate gewährt. Das heißt, der Code, der einen Truststore durchsuchen möchte, muss sein Passwort nicht kennen (aus sehr guten Gründen!)Ein Schlüsselspeicher enthält private Schlüssel. Sie benötigen dies nur, wenn Sie ein Server sind oder wenn der Server eine Clientauthentifizierung erfordert.
Ein Truststore enthält CA-Zertifikate, denen Sie vertrauen können. Wenn das Zertifikat Ihres Servers von einer anerkannten Zertifizierungsstelle signiert ist, vertraut der mit der JRE gelieferte Standard-Truststore ihm bereits (da er bereits vertrauenswürdigen Zertifizierungsstellen vertraut), sodass Sie keine eigenen erstellen oder der Zertifizierungsstelle etwas hinzufügen müssen von der JRE.
Quelle
quelle
Bei einem SSL-Handshake besteht der Zweck von trustStore darin, Anmeldeinformationen zu überprüfen, und der Zweck von keyStore besteht darin, Anmeldeinformationen bereitzustellen .
keyStore
keyStore in Java speichert private Schlüssel und Zertifikate, die ihren öffentlichen Schlüsseln entsprechen, und erfordert, wenn Sie SSL-Server sind oder SSL eine Clientauthentifizierung erfordert.
TrustStore
TrustStore speichert Zertifikate von Drittanbietern, Ihre Java-Anwendungskommunikation oder von CA signierte Zertifikate (Zertifizierungsstellen wie Verisign, Thawte, Geotrust oder GoDaddy), mit denen Dritte identifiziert werden können.
TrustManager
TrustManager bestimmt, ob die Remoteverbindung vertrauenswürdig sein soll oder nicht, dh ob die Remote-Partei derjenige ist, auf den sie Anspruch erhebt, und KeyManager entscheidet, welche Authentifizierungsdaten während des SSL-Handshakes zur Authentifizierung an den Remote-Host gesendet werden sollen.
Wenn Sie ein SSL-Server sind, verwenden Sie während des Schlüsselaustauschalgorithmus einen privaten Schlüssel und senden Zertifikate, die Ihren öffentlichen Schlüsseln entsprechen, an den Client. Dieses Zertifikat wird vom keyStore bezogen. Auf der SSL-Clientseite werden in Java gespeicherte Zertifikate verwendet, um die Identität des Servers zu überprüfen. SSL-Zertifikate werden am häufigsten als .cer- Datei geliefert, die mithilfe eines beliebigen Schlüsselverwaltungsdienstprogramms, z . B. keytool, in keyStore oder trustStore hinzugefügt wird .
Quelle: http://javarevisited.blogspot.ch
quelle
Möglicherweise interessieren Sie sich auch für die Beschreibung von Sun als Teil der Standard-JSSE-Dokumentation:
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores
In der Regel wird der Vertrauensspeicher nur zu Überprüfungszwecken verwendet, z. B. bei der X.509-Authentifizierung. Aus Gründen der Verwaltbarkeit ist es für Administratoren oder Entwickler durchaus üblich, die beiden einfach in einem einzigen Geschäft zusammenzuführen.
quelle
Hier ist die Beschreibung aus den Java-Dokumenten im Java Secure Socket Extension (JSSE) -Referenzhandbuch . Ich glaube nicht, dass es Ihnen etwas anderes sagt als das, was andere gesagt haben. Aber es liefert die offizielle Referenz.
quelle
Der erste und wichtigste Unterschied zwischen trustStore und keyStore besteht darin, dass TrustStan von TrustManager verwendet wird, um zu bestimmen, ob eine Remoteverbindung vertrauenswürdig ist. KeyStore wird von KeyManager verwendet, um zu entscheiden, welche Authentifizierungsdaten zur Authentifizierung während des SSL-Handshakes an den Remotehost gesendet werden sollen.
Ein weiterer Unterschied besteht darin, dass keyStore theoretisch private Schlüssel enthält, die nur erforderlich sind, wenn Sie einen Server in SSL-Verbindung ausführen oder die Clientauthentifizierung auf der Serverseite aktiviert haben und TrustStore andererseits öffentliche Schlüssel oder Zertifikate von CA (Certificate Authorities) speichert, die gewohnt sind Vertrauen Sie einer Remote-Partei oder einer SSL-Verbindung.
Tatsächlich können Sie sowohl private als auch öffentliche Schlüssel in derselben Datei speichern, da das Tool zum Verwalten dieser Dateien dasselbe ist (Keytool), sodass Sie für beide Zwecke eine einzige Datei verwenden können, dies sollten Sie jedoch wahrscheinlich nicht .
Zumindest unter Mac OS X ist
${user.home}/.keystore
der Standard-KeyStore und der Standard-TrustStore/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
.Wenn Sie sie überschreiben möchten, sollten Sie die JVM-Parameter
-Djavax.net.ssl.keyStore /path/to/keyStore
oder hinzufügen-Djavax.net.ssl.trustStore /path/to/trustStore
. Möglicherweise müssen Sie auch das keyStore-Kennwort festlegenjava.security.UnrecoverableKeyException: Password must not be null
, indem Sie den Parameter-Djavax.net.ssl.trustStorePassword=password
oder verwenden-Djavax.net.ssl.trustStorePassword=password
Hauptquelle:
quelle