Trust Store vs Key Store-création avec keytool

je comprends que le keystore détient habituellement les clés privées/publiques et que la fiducie ne conserve que les clés publiques (et représente la liste des personnes de confiance avec lesquelles vous avez l'intention de communiquer). Eh bien, c'est ma première hypothèse, si ce n'est pas correct, je n'ai pas très bien...

j'étais intéressé cependant à comprendre comment / quand vous distinguez les magasins quand vous utilisez keytool.

jusqu'à présent j'ai créé une clef de voûte utilisant

keytool -import -alias bob -file bob.crt -keystore keystore.ks

qui crée mon keystore.dossier ks. Je réponds yes à la question Est-ce que je fais confiance à bob mais je ne sais pas si cela a créé un fichier keystore ou un fichier trustststore? Je peux configurer mon application pour utiliser le fichier en tant que.

-Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x
-Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x

et avec System.setProperty( "javax.net.debug", "ssl") mis, je peux voir le certificat sous les certifications de confiance (mais pas sous la section keystore). Le certificat que j'importe n'a que une clé publique et j'ai l'intention de l'utiliser pour envoyer des choses sur une connexion SSL à Bob (mais peut-être que c'est mieux pour une autre question!).

toute indication ou précision serait grandement appréciée. Est-ce que la sortie de keytool est la même chose que ce que vous importez et sa convention juste qui dit que l'un est un keystore et l'autre un magasin de confiance? Quelle est la relation lors de L'utilisation de SSL etc?

194
demandé sur ROMANIA_engineer 2011-06-14 12:23:14

5 réponses

la terminologie est un peu confuse en effet, mais les deux javax.net.ssl.keyStore et javax.net.ssl.trustStore sont utilisés pour spécifier les keystores à utiliser, à deux fins différentes. Les Keystores sont disponibles dans différents formats et ne sont même pas nécessairement des fichiers (voir cette question ), et keytool est juste un outil pour effectuer diverses opérations sur eux (import/export/list/...).

les paramètres javax.net.ssl.keyStore et javax.net.ssl.trustStore sont les paramètres par défaut utilisés pour construire KeyManager s et TrustManager s (respectivement), puis utilisé pour construire un SSLContext qui contient essentiellement les paramètres SSL/TLS à utiliser lors de la réalisation d'une connexion SSL/TLS via un SSLSocketFactory ou un SSLEngine . Ces propriétés de système sont exactement d'où viennent les valeurs par défaut, qui est alors utilisé par SSLContext.getDefault() , lui-même utilisé par SSLSocketFactory.getDefault() par exemple. (Tout cela peut être personnalisé via L'API dans un certain nombre d'endroits, si vous ne voulez pas utiliser les valeurs par défaut et que spécifique SSLContext s pour un but donné.)

la différence entre KeyManager et TrustManager (et donc entre javax.net.ssl.keyStore et javax.net.ssl.trustStore ) est la suivante (tirée du JSSE ref guide ):

TrustManager: détermine si le authentification à distance (et ainsi, la connexion) devrait être confiance.

KeyManager: détermine qui authentification à envoyer à l'hôte distant.

(D'autres paramètres sont disponibles et leurs valeurs par défaut sont décrites dans le JSSE ref guide . Notez que bien qu'il y ait une valeur par défaut pour le magasin en fiducie, il n'y en a pas pour le magasin de clés.)

essentiellement, le "keystore" dans javax.net.ssl.keyStore est destiné à contenir vos clés privées et les certificats, tandis que le javax.net.ssl.trustStore est destiné à contenir le Certificats de L'AC vous êtes prêt à faire confiance lorsqu'une partie éloignée présente son certificat. Dans certains cas, il peut s'agir d'un seul et même magasin, bien qu'il soit souvent préférable d'utiliser des magasins distincts (surtout lorsqu'ils sont fondés sur des fichiers).

268
répondu Bruno 2017-05-23 12:10:33

il n'y a pas de différence entre les fichiers keystore et truststststore. Les deux sont des fichiers au format propriétaire JKS. La distinction se trouve dans l'utilisation: à ma connaissance, Java n'utilisera que le magasin référencé par javax.net.ssl.trustStore pour rechercher des certificats de confiance lors de la création de connexions SSL. Idem pour les clés et javax.net.ssl.keyStore . Mais en théorie, c'est bien d'utiliser un seul et même fichier pour trust - et keystores.

22
répondu musiKk 2011-06-14 08:35:27

pour expliquer en termes d'usage commun / but ou de manière profane:

Truststststore : comme son nom l'indique, son normalement utilisé pour stocker les certificats d'entités de confiance. Un processus peut maintenir un stock de certificats de toutes ses parties de confiance qui il a confiance.

keyStore : utilisé pour stocker les clés du serveur (à la fois public et privé)) avec signé cert.

au Cours de la négociation SSL,

  1. un client essaie d'accéder à https://

  2. et donc, le serveur répond en fournissant un certificat SSL (qui est stocké dans son keyStore)

  3. maintenant, le client reçoit le certificat SSL et le vérifie via truststststore (I. e la société de Fiducie du client a déjà un ensemble prédéfini de certificats qui il approuve.). C'est comme : Puis-je faire confiance à ce serveur ? Est-ce le même serveur à qui j'essaie de parler ? Pas d'attaques d'intermédiaires ?

  4. une fois, le client vérifie qu'il parle au serveur auquel il fait confiance, alors la communication SSL peut se produire sur une clé secrète partagée.

Note : Je ne parle pas ici de l'authentification du client du côté du serveur. Si un serveur veut faire une authentification du client trop, alors le serveur maintient également un trustStore pour vérifier le client.

20
répondu Balaji Boggaram Ramanarayan 2018-02-16 19:18:47

Keystore est utilisé par un serveur pour stocker les clés privées, et truststststore est utilisé par un client tiers pour stocker les clés publiques fournies par le serveur pour accéder. Je l'ai fait dans mon application de production. Voici les étapes pour générer des certificats java pour la communication SSL:

  1. générer un certificat en utilisant la commande keygen dans windows:

keytool -genkey -fichier de clés du serveur.keystore-alias mycert-20161109-keyalg RSA -keysize 2048 -validité 3950

  1. autocertification du certificat:

keytool -selfcert -alias mycert-20161109 -fichier de clés du serveur.fichier de stockage des clés de validité de 3950

  1. certificat D'exportation à dossier:

keytool -export-alias mycert-20161109 -fichier de clés du serveur.keystore -rfc -fichier mycert-20161109.cer

  1. certificat D'importation dans le client Truststore:

keytool-importcert-alias mycert-20161109-file C:\certs\mycert-20161109 -keystore .truststststore

9
répondu Akash5288 2018-03-02 16:25:49

keystore stocke tout simplement les clés privées, alors que truststststore stocke les clés publiques. Vous souhaitez générer un certificat java pour la communication SSL. Vous pouvez utiliser une commande keygen dans windows, ce sera probablement la solution la plus facile.

1
répondu Team END_TECH 2017-12-19 13:58:07