Was ist der Unterschied zwischen einem Keystore und einem Truststore?
Was ist der Unterschied zwischen einem Keystore und einem Truststore?
Antworten:
Ein Schlüsselspeicher enthält private Schlüssel und die Zertifikate mit den entsprechenden öffentlichen Schlüsseln.
Ein Truststore enthält Zertifikate von anderen Parteien, mit denen Sie voraussichtlich kommunizieren werden, oder von Zertifizierungsstellen, denen Sie vertrauen, um andere Parteien zu identifizieren.
TrustStore
per se . Oder ich konnte es nicht in den Java-Dokumenten finden (zum Beispiel java.security.TrustStore
). Wenn wir einer Zertifizierungsstelle vertrauen möchten, wird ihr über a vertraut KeyStore
(und das KeyStore
wird an die übergeben TrustManagerFactory
).
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.
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
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.
Was ist in Java der Unterschied zwischen einem Keystore und einem Truststore?
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.
Keystore / Truststore
Ein Keystore ist eine Datenbank mit Schlüsselmaterial. Schlüsselmaterial wird für eine Vielzahl von Zwecken verwendet, einschließlich Authentifizierung und Datenintegrität. Es stehen verschiedene Arten von Keystores zur Verfügung, darunter PKCS12 und Oracle JKS.
Im Allgemeinen können Schlüsselspeicherinformationen in zwei Kategorien eingeteilt werden: Schlüsseleinträge und vertrauenswürdige Zertifikatseinträge. Ein Schlüsseleintrag besteht aus der Identität einer Entität und ihrem privaten Schlüssel und kann für eine Vielzahl von kryptografischen Zwecken verwendet werden. Im Gegensatz dazu enthält ein vertrauenswürdiger Zertifikatseintrag neben der Identität der Entität nur einen öffentlichen Schlüssel. Daher kann ein vertrauenswürdiger Zertifikatseintrag nicht verwendet werden, wenn ein privater Schlüssel erforderlich ist, z. B. in einem javax.net.ssl.KeyManager. In der JDK-Implementierung von JKS kann ein Schlüsselspeicher sowohl Schlüsseleinträge als auch vertrauenswürdige Zertifikatseinträge enthalten.
Ein Truststore ist ein Keystore, der verwendet wird, um Entscheidungen darüber zu treffen, was vertrauenswürdig ist. Wenn Sie Daten von einer Entität erhalten, der Sie bereits vertrauen, und wenn Sie überprüfen können, ob die Entität diejenige ist, für die sie sich ausgibt, können Sie davon ausgehen, dass die Daten tatsächlich von dieser Entität stammen.
Ein Eintrag sollte einem Truststore nur hinzugefügt werden, wenn der Benutzer dieser Entität vertraut. Durch Generieren eines Schlüsselpaars oder durch Importieren eines Zertifikats vertraut der Benutzer diesem Eintrag. Jeder Eintrag im Truststore wird als vertrauenswürdiger Eintrag betrachtet.
Es kann nützlich sein, zwei verschiedene Keystore-Dateien zu haben: eine mit nur Ihren Schlüsseleinträgen und die andere mit Ihren vertrauenswürdigen Zertifikatseinträgen, einschließlich CA-Zertifikaten. Ersteres enthält private Informationen, letzteres nicht. Die Verwendung von zwei Dateien anstelle einer einzelnen Keystore-Datei ermöglicht eine sauberere Trennung der logischen Unterscheidung zwischen Ihren eigenen Zertifikaten (und den entsprechenden privaten Schlüsseln) und den Zertifikaten anderer. Um Ihre privaten Schlüssel besser zu schützen, speichern Sie sie in einem Schlüsselspeicher mit eingeschränktem Zugriff und stellen Sie die vertrauenswürdigen Zertifikate bei Bedarf in einem öffentlich zugänglichen Schlüsselspeicher bereit.
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 festlegen
java.security.UnrecoverableKeyException: Password must not be
null
, indem Sie den Parameter
-Djavax.net.ssl.trustStorePassword=password
oder verwenden-Djavax.net.ssl.trustStorePassword=password
Hauptquelle:
http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html