Truststore- und Keystore-Definitionen

Antworten:

268

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.

Darron
quelle
12
Obwohl dies in der Praxis zutreffen sollte, können (und sind sie oft) ein und dasselbe. Sie können tatsächlich einen privaten Schlüssel und ein öffentliches Zertifikat in den Standard-Truststore [java home] / jre / lib / security / cacerts importieren. Das Dienstprogramm keytool unterscheidet in beiden Begriffen nicht, sondern nur in Speichertypen (dh - JKS vs. PKCS12). Im Übrigen macht Java dasselbe im Quellcode. Sie erstellen einen java.security.KeyStore und verwenden einen Vertrauensmanager, um die darin enthaltenen Zertifikate zu verwalten. Es gibt jedoch keine TrustStore-Klasse.
4
Java hat kein 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 KeyStorewird an die übergeben TrustManagerFactory).
JWW
5
Es ist erwähnenswert, dass 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!)
xverges
83
  1. 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.

  2. 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

ha9u63ar
quelle
73

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

Aniket Thakur
quelle
31

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.

Peter Mularien
quelle
1
Gibt leider eine 404
Chris Beach
@ChrisBeach - hat den Link auf der Oracle-Site auf den richtigen Link aktualisiert.
Peter Mularien
1
Der Truststore wird zum Speichern vertrauenswürdiger Unterzeichnerzertifikate verwendet.
Marquis von Lorne
9

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.

jww
quelle
4
  1. 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.

  2. 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 .

  3. Zumindest unter Mac OS X ist ${user.home}/.keystoreder 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/keyStoreoder 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=passwordoder verwenden-Djavax.net.ssl.trustStorePassword=password

Hauptquelle:

http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

alessiop86
quelle