Trust Store vs Magasin de Clés - création avec keytool
Je comprends que le fichier de clés serait généralement privée/clé publique et la confiance stocker uniquement les clés publiques (et correspond à la liste des tiers de confiance que vous avez l'intention de communiquer avec). 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é, mais à comprendre comment /quand vous distinguer les magasins lors de l'utilisation de keytool.
Donc, à présent, j'ai créé un fichier de clés à l'aide de
keytool -import -alias bob -file bob.crt -keystore keystore.ks
qui crée mon fichier de clés.ks fichier. Je réponds yes
à la question dois-je faire confiance à bob, mais il est clair pour moi si cela a créé un fichier de magasin de clés ou un fichier truststore? 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")
ensemble, je peux voir le certificat de confiance certifications (mais pas dans le fichier de stockage des clés de la section). Le certificat en particulier, je suis à l'importation a qu'une clé publique et j'ai l'intention de l'utiliser pour envoyer des trucs sur une connexion SSL à Bob (mais peut-être qu'il vaut mieux laisser pour une autre question!).
Tous les pointeurs ou des clarifications seraient très appréciés. Est la sortie de keytool la même quelle que soit vous importez et son juste convention qui dit que l'un est un magasin de clés et de l'autre un magasin de confiance? Quelle est la relation lors de l'utilisation de SSL etc?
- Je ne suis pas sûr de ce que tu veux dire par "Le certificat particulier, je suis à l'importation a qu'une clé publique": est-il juste d'une clé publique (c'est à dire pas d'un certificat ou d'un certificat d'autorité de certification?
- hmmm, pas sûr. J'ai exporté à partir de mon navigateur internet comme un fichier PEM. Cela vous aide?
- S'il est exporté à partir du navigateur, il s'agit probablement d'un certificat. Est-il un certificat de serveur (avec un CN ou subjectAltName correspondant au nom du serveur)? Est-il un certificat d'autorité de certification (voir sous Contraintes de Base, vous devriez être en mesure de voir ce à l'aide de votre navigateur).
- tl;dr: trust magasins contiennent public, de confiance, de la racine (CA) certs, alors que l'identité/les magasins de clés contiennent privée, de l'identité certs; fichier-sage, cependant, ils sont les mêmes.
Vous devez vous connecter pour publier un commentaire.
La terminologie est un peu déroutant en effet, mais les deux
javax.net.ssl.keyStore
etjavax.net.ssl.trustStore
sont utilisés pour spécifier les fichiers de clés à utiliser, pour deux raisons différentes. Fichier de stockage des clés sont disponibles en divers formats et ne sont même pas nécessairement de fichiers (voir cette question), etkeytool
est juste un outil pour effectuer diverses opérations d'importation/exportation/liste/...).La
javax.net.ssl.keyStore
etjavax.net.ssl.trustStore
les paramètres par défaut sont les paramètres utilisés pour construireKeyManager
s etTrustManager
s (respectivement), puis utilisé pour construire uneSSLContext
qui contient essentiellement le protocole SSL/TLS paramètres à utiliser lors d'une connexion SSL/TLS via unSSLSocketFactory
ou unSSLEngine
. Ces propriétés du système sont juste là où les valeurs par défaut proviennent, qui est ensuite utilisé parSSLContext.getDefault()
, elle-même utilisée parSSLSocketFactory.getDefault()
par exemple. (Toutes ces informations peuvent être personnalisés par le biais de l'API dans un certain nombre d'endroits, si vous ne voulez pas utiliser les valeurs par défaut et que lesSSLContext
s pour un but donné.)La différence entre le
KeyManager
etTrustManager
(et donc entrejavax.net.ssl.keyStore
etjavax.net.ssl.trustStore
) est comme suit (cité de la JSSE réf guide):(Les autres paramètres sont disponibles et leurs valeurs par défaut sont décrites dans le JSSE réf guide. Notez que bien qu'il y est une valeur par défaut pour la banque de confiance, il n'y en a pas un pour le magasin de clés.)
Essentiellement, le fichier de clés dans
javax.net.ssl.keyStore
est conçu pour contenir vos clés privées et des certificats, alors que lajavax.net.ssl.trustStore
est destinée à contenir les certificats d'autorité de certification que vous êtes prêt à faire confiance lorsqu'une partie à distance présente son certificat. Dans certains cas, ils peuvent être un seul et même magasin, même si il est souvent préférable d'utiliser divers magasins (surtout lorsqu'ils sont basés sur un fichier).$JAVA_HOME/lib/security/cacerts
(voir 2ème JSSE réf guide lien que j'ai envoyé). Comme les navigateurs, il contient un ensemble par défaut de confiance des certificats d'autorité de certification. En général, un client sera toujours utiliser un truststore vérifier le serveur cert, mais le fichier de clés ne sera utilisé que si le serveur demande à un client cert, et le serveur va toujours utiliser un fichier de clés pour sa propre clé+cert mais le truststore ne sera utilisé que si le client envoie un certificat au client.Pour expliquer en commun cas d'utilisation/usage ou profane moyen:
Au cours de la négociation SSL,
Un client tente d'accéder à https://
Et donc, le Serveur répond en envoyant un certificat SSL (qui est stocké dans son fichier de clés)
Maintenant, le client reçoit le certificat SSL et le vérifie via trustStore (j'.e du client trustStore a déjà pré-défini de certificats qui il a confiance.). L'un de ses semblables : puis-je faire confiance à ce serveur ? Est-ce le même serveur que je suis en train de parler ? Aucun homme au milieu des attaques ?
Une fois, le client vérifie qu'il est en train de parler à un serveur qui il a confiance, alors la communication SSL peut se produire au cours d'une clé secrète partagée.
Note : je ne parle pas ici quelque chose à propos de l'authentification du client sur le serveur. Si un serveur veut faire une authentification du client, puis le serveur maintient également un trustStore pour vérifier le client.
Il n'y a pas de différence entre un fichier de clés et truststore fichiers. Les deux fichiers sont la propriété JKS format de fichier. La distinction est dans l'utilisation: au meilleur de mes connaissances, de Java à utiliser exclusivement le magasin qui est référencé par
javax.net.ssl.trustStore
à rechercher des certificats de confiance lors de la création de connexions SSL. Même pour les clés etjavax.net.ssl.keyStore
. Mais en théorie, c'est bien d'utiliser un seul et même fichier pour la confiance et des fichiers de clés.javax.net.ssl.keyStoreType
etjavax.net.ssl.trustStoreType
propriétés du système.Fichier est utilisé par un serveur pour stocker les clés privées, et Truststore est utilisé par le client à un tiers pour stocker les clés publiques fournies par le serveur d'accès. Je l'ai fait dans mon application en production. Ci-dessous sont les étapes à suivre pour la génération java certificats SSL pour la communication:
keytool -genkey -keystore server.keystore -alias mycert -keyalg RSA -keysize 2048 -validity 3950
keytool -selfcert -alias mycert -keystore server.keystore -validity 3950
keytool -export -alias mycert -keystore server.keystore -rfc -file mycert.cer
keytool -importcert -alias mycert -file mycert.cer -keystore truststore
En termes plus simples :
Keystore est utilisé pour stocker vos informations d'identification (serveur ou client), tandis que truststore est utilisé pour stocker d'autres informations d'identification (Certificats de CA).
Fichier de clés est nécessaire lors de l'élaboration de côté de serveur SSL, il est utilisé pour stocker du serveur de certificat d'identité, le serveur qui va la présenter à un client sur la connexion alors que la confiance d'enregistrer la configuration côté client doit contenir à faire la relation de travail. Si vous navigateur pour vous connecter à un site SSL elle vérifie le certificat présenté par le serveur à l'encontre de ses truststore.
keystore simplement de stocker des clés privées, wheras truststore magasins de clés publiques. Vous souhaitez générer un java certificat pour la communication SSL. Vous pouvez utiliser un keygen de commande dans windows, ceci sera probablement le plus facile solution.