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?
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).
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.
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,
-
un client essaie d'accéder à https://
-
et donc, le serveur répond en fournissant un certificat SSL (qui est stocké dans son keyStore)
-
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 ?
-
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.
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:
- 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
- autocertification du certificat:
keytool -selfcert -alias mycert-20161109 -fichier de clés du serveur.fichier de stockage des clés de validité de 3950
- certificat D'exportation à dossier:
keytool -export-alias mycert-20161109 -fichier de clés du serveur.keystore -rfc -fichier mycert-20161109.cer
- certificat D'importation dans le client Truststore:
keytool-importcert-alias mycert-20161109-file C:\certs\mycert-20161109 -keystore .truststststore
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.