2008-11-25 5 views

Répondre

233

Un magasin de clés contient des clés privées et les certificats avec leurs clés publiques correspondantes. Un fichier de clés certifiées contient des certificats d'autres parties avec lesquelles vous pensez communiquer, ou des autorités de certification auxquelles vous faites confiance pour identifier d'autres parties.

+10

Bien que cela ne devrait être vrai dans la pratique, ils peuvent (et sont souvent) un pareil. Vous pouvez réellement importer une clé privée et un certificat public dans le fichier "confiance" de [java home]/jre/lib/security/cacerts par défaut. L'utilitaire keytool ne fait pas de distinction dans les deux termes, seulement 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 fichier java.security.KeyStore et utilisez un gestionnaire de confiance pour gérer les certificats, mais il n'y a pas de classe TrustStore. –

+4

Java n'a pas de 'TrustStore' * en soi *. Ou je ne pouvais pas le trouver dans les docs java (par exemple, 'java.security.TrustStore'). Quand nous voulons faire confiance à une autorité de certification, elle est approuvée par un 'KeyStore' (et le' KeyStore' est passé dans le 'TrustManagerFactory'). – jww

+5

Il est à noter que KeyStore.load (InputStream est, char [] mot de passe) '([docs] (http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html # load% 28java.io.InputStream,% 20char []% 29)) peut prendre un mot de passe nul et donnera alors accès aux certificats publics. C'est-à-dire, le code qui veut parcourir un truststore n'a pas besoin de le connaître mot de passe (pour de très bonnes raisons!) – xverges

70
  1. Un fichier de clés contient des clés privées. Vous en avez seulement besoin si vous êtes un serveur ou si le serveur requiert 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 fichier de clés certifiées par défaut fourni avec le JRE le fera déjà confiance (car il contient déjà des autorités de certification fiables). Vous n'avez donc pas besoin de créer le vôtre, ou d'ajouter n'importe quoi à celui du JRE.

Source

25

Vous pouvez également être intéressé par le write-up de Sun, dans le cadre de la documentation standard JSSE:

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

En règle générale, le magasin 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 gérabilité, il est assez commun pour les administrateurs ou les développeurs de simplement regrouper les deux dans un seul magasin.

+1

Donne malheureusement un 404 –

+0

@ChrisBeach - avez mis à jour le lien vers le bon sur le site Oracle. –

+0

Le fichier de clés certifiées est utilisé pour stocker * les certificats de signataire approuvés. * – EJP

60

Dans une poignée de main SSL afin de trustStore est de vérifier les informations d'identification et le but de keyStore est de fournir des titres de compétences.

keyStore

keyStore dans les magasins Java clés privées et des certificats correspondant à leurs clés publiques et exiger si vous êtes SSL Server ou SSL requiert une authentification client.

TrustStore

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

TrustManager

TrustManager détermine si la connexion à distance doit être digne de confiance ou non à savoir si votre interlocuteur est celui qu'il prétend et KeyManager décide que les informations d'authentification doivent être envoyées à l'hôte distant pour l'authentification lors de poignée de main SSL.

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

Source: http://javarevisited.blogspot.ch

+3

Cette réponse répond à l'objectif de chacun de ceux qui, selon moi, répond le mieux à la question. –

+0

Cela clarifie vraiment beaucoup de terminologies. –

9

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

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

keystore/truststore

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

D'une manière générale, les informations de magasin 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é consiste en l'identité d'une entité et sa clé privée et peut être utilisée pour une variété de 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, par exemple dans un javax.net.ssl.KeyManager. Dans l'implémentation JDK de JKS, un keystore peut contenir à la fois des entrées de clé et des entrées de certificat approuvées. Un fichier de clés certifiées est un fichier de clés utilisé lors de la prise de décision sur ce à quoi il faut faire confiance. Si vous recevez des données d'une entité déjà approuvée par , et si vous pouvez vérifier que l'entité est celle que prétend être, alors vous pouvez supposer que les données proviennent réellement de cette entité.

Une entrée ne doit être ajoutée à un fichier de clés certifiées que si l'utilisateur approuve 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 du fichier de clés certifiées est considérée comme une entrée sécurisée.

Il peut être utile d'avoir deux fichiers de magasin de clés différents: l'un ne contenant que vos entrées de clé et l'autre contenant vos entrées de certificat de confiance , y compris les certificats de CA. L'ancien contient des informations privées, alors que ce dernier ne le fait pas. L'utilisation de deux fichiers au lieu d'un seul fichier de magasin de clés fournit 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 fournir plus de protection pour vos clés privées, stockez-les dans un magasin de clés avec accès restreint et fournissez les certificats de confiance dans un magasin de clés plus accessible au public si nécessaire.

3
  1. première différence majeure entre trustStore et keyStore est que trustStore est utilisé par TrustManager pour déterminer s'il faut faire confiance connexion à distance, keyStore est utilisé à partir KeyManager décider quelles informations d'authentification doivent être envoyées à l'hôte distant pour authentification lors de la négociation SSL. Une autre différence est que keyStore contient théoriquement des clés privées requises uniquement si vous exécutez une connexion Server in 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 faire confiance à une partie distante ou à une connexion SSL.

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

  2. Au moins sur mon Mac OSX le keyStore par défaut est ${user.home}/.keystore, et le trustStore par défaut est /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts.

    Si vous voulez les remplacer, vous devez ajouter les paramètres JVM -Djavax.net.ssl.keyStore /path/to/keyStore ou -Djavax.net.ssl.trustStore /path/to/trustStore. Vous pouvez également besoin de 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=password ou -Djavax.net.ssl.trustStorePassword=password

Source principale:

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

Questions connexes