Définitions Truststore et Keystore

Réponses:

268

Un magasin de clés contient des clés privées et les certificats avec leurs clés publiques correspondantes.

Un magasin de clés de confiance contient des certificats d'autres parties avec lesquelles vous prévoyez de communiquer ou des autorités de certification auxquelles vous faites confiance pour identifier d'autres parties.

Darron
la source
12
Bien que cela devrait être vrai dans la pratique, ils peuvent (et sont souvent) un en même temps. Vous pouvez réellement importer une clé privée et un certificat public dans le [truststore] par défaut [java home] / jre / lib / security / cacerts. L'utilitaire keytool ne fait pas de distinction dans les deux termes, uniquement dans les types de magasin (c'est-à-dire - JKS vs PKCS12). D'ailleurs, Java fait la même chose dans le code source. Vous créez un java.security.KeyStore et utilisez un gestionnaire d'approbation pour gérer les certificats qu'il contient, mais il n'y a pas de classe TrustStore.
4
Java n'en a pas en TrustStore soi . Ou je ne pouvais pas le trouver dans les documents java (par exemple, java.security.TrustStore). Lorsque nous voulons faire confiance à une autorité de certification, elle est approuvée via un KeyStore(et le KeyStoreest transmis au TrustManagerFactory).
2014
5
Il convient de mentionner que KeyStore.load(InputStream is, char[] password)( docs ) peut prendre un mot de passe nul et qu'il donnera alors accès aux certificats publics. Autrement dit, le code qui veut parcourir un magasin de clés de confiance n'a pas besoin de le connaître (pour de très bonnes raisons!)
xverges
83
  1. Un magasin de clés contient des clés privées. Vous n'en avez besoin que si vous êtes un serveur ou si le serveur nécessite une authentification client.

  2. Un fichier de clés certifiées contient des certificats CA à approuver. Si le certificat de votre serveur est signé par une autorité de certification reconnue, le magasin de clés de confiance par défaut fourni avec le JRE lui fera déjà confiance (car il fait déjà confiance aux autorités de certification dignes de confiance), vous n'avez donc pas besoin de créer le vôtre ou d'ajouter quoi que ce soit à celui-ci. du JRE.

La source

ha9u63ar
la source
73

Dans une poignée de main SSL, le but du trustStore est de vérifier les informations d'identification et le but du keyStore est de fournir les informations d'identification .

keyStore

keyStore dans Java stocke la clé privée et les certificats correspondant à leurs clés publiques et requiert si vous êtes un serveur SSL ou SSL nécessite une authentification client.

TrustStore

TrustStore stocke des certificats de tiers, votre application Java communique ou des certificats signés par CA (autorités de certification comme Verisign, Thawte, Geotrust ou GoDaddy) qui peuvent être utilisés pour identifier des tiers.

TrustManager

TrustManager détermine si la connexion à distance doit être approuvée ou non, c'est-à-dire si la partie distante est la personne à laquelle elle prétend et KeyManager décide quelles informations d'authentification doivent être envoyées à l'hôte distant pour l'authentification lors de la négociation SSL.

Si vous êtes un serveur SSL, vous utiliserez la clé privée pendant l'algorithme d'échange de clés et enverrez les certificats correspondant à vos clés publiques au client, ce certificat est acquis auprès de keyStore. Côté client SSL, s'il est écrit en Java, il utilisera des certificats stockés dans trustStore pour vérifier l'identité du serveur. Les certificats SSL sont le plus souvent fournis sous la forme d'un fichier .cer qui est ajouté dans keyStore ou trustStore à l'aide de n'importe quel utilitaire de gestion de clés, par exemple keytool .

Source: http://javarevisited.blogspot.ch

Aniket Thakur
la source
31

Vous pouvez également être intéressé par l'écriture de Sun, dans le cadre de la documentation JSSE standard:

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

En règle générale, le magasin de clés de confiance est utilisé pour stocker uniquement les clés publiques, à des fins de vérification, comme avec l'authentification X.509. À des fins de gestion, il est assez courant pour les administrateurs ou les développeurs de simplement fusionner les deux en un seul magasin.

Peter Mularien
la source
1
Donne un 404 malheureusement
Chris Beach
@ChrisBeach - ont mis à jour le lien vers le bon sur le site Oracle.
Peter Mularien
1
Le fichier de clés certifiées est utilisé pour stocker des certificats de signataire approuvés.
Marquis de Lorne
9

En Java, quelle est la différence entre un keystore et un truststore?

Voici la description des documents Java du Guide de référence de Java Secure Socket Extension (JSSE) . Je ne pense pas que cela vous dise quelque chose de différent de ce que les autres ont dit. Mais il fournit la référence officielle.

keystore / truststore

Un magasin de clés est une base de données de documents clés. Le matériel clé est utilisé à diverses fins, notamment l'authentification et l'intégrité des données. Différents types de magasins de clés sont disponibles, y compris PKCS12 et JKS d'Oracle.

De manière générale, les informations du fichier de clés peuvent être regroupées en deux catégories: les entrées de clé et les entrées de certificat de confiance. Une entrée de clé se compose de l'identité d'une entité et de sa clé privée et peut être utilisée à diverses fins cryptographiques. En revanche, une entrée de certificat de confiance contient uniquement une clé publique en plus de l'identité de l'entité. Ainsi, une entrée de certificat de confiance ne peut pas être utilisée lorsqu'une clé privée est requise, comme dans un javax.net.ssl.KeyManager. Dans l'implémentation JDK de JKS, un magasin de clés peut contenir à la fois des entrées de clé et des entrées de certificat de confiance.

Un fichier de clés certifiées est un fichier de clés utilisé lors de la prise de décision sur quoi faire confiance. Si vous recevez des données d'une entité en laquelle vous avez déjà confiance et si vous pouvez vérifier que l'entité est bien celle qu'elle prétend être, vous pouvez alors supposer que les données proviennent réellement de cette entité.

Une entrée ne doit être ajoutée à un magasin de clés de confiance que si l'utilisateur fait confiance à cette entité. En générant une paire de clés ou en important un certificat, l'utilisateur donne confiance à cette entrée. Toute entrée dans le magasin de clés de confiance est considérée comme une entrée de confiance.

Il peut être utile d'avoir deux fichiers de clés différents: l'un contenant uniquement vos entrées de clé, et l'autre contenant vos entrées de certificat de confiance, y compris les certificats d'autorité de certification. Le premier contient des informations privées, contrairement au second. L'utilisation de deux fichiers au lieu d'un seul fichier de clés permet une séparation plus nette de la distinction logique entre vos propres certificats (et les clés privées correspondantes) et les certificats des autres. Pour protéger davantage vos clés privées, stockez-les dans un magasin de clés à accès restreint et fournissez les certificats de confiance dans un magasin de clés plus accessible au public si nécessaire.

jww
la source
4
  1. La première et principale différence entre trustStore et keyStore est que trustStore est utilisé par TrustManager pour déterminer si la connexion à distance doit être approuvée, keyStore est utilisé à partir de KeyManager pour décider quelles informations d'authentification doivent être envoyées à l'hôte distant pour l'authentification lors de la négociation SSL.

  2. Une autre différence est que keyStore contient théoriquement des clés privées requises uniquement si vous exécutez un serveur en connexion SSL ou si vous avez activé l'authentification client côté serveur et d'autre part, trustStore stocke la clé publique ou les certificats de CA (autorités de certification) qui sont utilisés pour faites confiance à une partie distante ou à une connexion SSL.

    En fait, vous pouvez stocker dans le même fichier des clés privées et publiques, étant donné que l'outil pour gérer ces fichiers est le même (keytool), vous pouvez donc utiliser un seul fichier à la fois pour les deux fins, mais vous ne devriez probablement pas .

  3. Au moins sur mon Mac OSX, le magasin de clés par défaut est ${user.home}/.keystoreet le magasin de clés par défaut est /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts.

    Si vous souhaitez les remplacer, vous devez ajouter les paramètres JVM -Djavax.net.ssl.keyStore /path/to/keyStoreou -Djavax.net.ssl.trustStore /path/to/trustStore. Vous devrez peut-être également définir le mot de passe keyStore en cas de java.security.UnrecoverableKeyException: Password must not be null, en utilisant le paramètre -Djavax.net.ssl.trustStorePassword=passwordou-Djavax.net.ssl.trustStorePassword=password

Source principale:

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

alessiop86
la source