Je comprends que le magasin de clés détiendrait généralement des clés privées / publiques et le magasin de clés de confiance uniquement des clés publiques (et représente la liste des parties de confiance avec lesquelles vous avez l'intention de communiquer). Eh bien, c'est ma première hypothèse, donc si ce n'est pas correct, je n'ai probablement pas très bien commencé ...
J'étais cependant intéressé à comprendre comment / quand vous distinguez les magasins lors de l'utilisation de keytool.
Donc, jusqu'à présent, j'ai créé un magasin de clés en utilisant
keytool -import -alias bob -file bob.crt -keystore keystore.ks
qui crée mon fichier keystore.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 truststore? Je peux configurer mon application pour utiliser le fichier comme l'un ou l'autre.
-Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x
-Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x
et avec l' System.setProperty( "javax.net.debug", "ssl")
ensemble, je peux voir le certificat sous des certifications de confiance (mais pas sous la section keystore). Le certificat particulier que j'importe n'a qu'une clé publique et j'ai l'intention de l'utiliser pour envoyer des trucs via une connexion SSL à Bob (mais il vaut peut-être mieux laisser une autre question!).
Toute indication ou clarification serait très appréciée. La sortie de keytool est-elle la même que vous importiez et sa juste convention qui dit que l'un est un magasin de clés et l'autre un magasin de confiance? Quelle est la relation lors de l'utilisation de SSL, etc.?
Réponses:
La terminologie est un peu déroutante 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, à deux fins différentes. Les magasins de clés se présentent sous différents formats et ne sont même pas nécessairement des fichiers (voir cette question ), et nekeytool
sont qu'un outil pour effectuer diverses opérations sur eux (import / export / list / ...).Les paramètres
javax.net.ssl.keyStore
etjavax.net.ssl.trustStore
sont les paramètres par défaut utilisés pour créerKeyManager
s etTrustManager
s (respectivement), puis utilisés pour créer unSSLContext
qui contient essentiellement les paramètres SSL / TLS à utiliser lors de l'établissement d'une connexion SSL / TLS via unSSLSocketFactory
ou unSSLEngine
. Ces propriétés système sont exactement d'où proviennent les valeurs par défaut, qui sont ensuite utilisées parSSLContext.getDefault()
, elle-même utilisée parSSLSocketFactory.getDefault()
exemple. (Tout cela peut être personnalisé via l'API à plusieurs endroits, si vous ne souhaitez pas utiliser les valeurs par défaut etSSLContext
pour un objectif donné.)La différence entre le
KeyManager
etTrustManager
(et donc entrejavax.net.ssl.keyStore
etjavax.net.ssl.trustStore
) est la suivante (citée dans le guide de référence JSSE ):(D'autres paramètres sont disponibles et leurs valeurs par défaut sont décrites dans le guide de référence JSSE . Notez que s'il existe une valeur par défaut pour le magasin de clés de confiance, il n'y en a pas pour le magasin de clés.)
Essentiellement, le magasin de
javax.net.ssl.keyStore
clés est destiné à contenir vos clés et certificats privés, tandis que lejavax.net.ssl.trustStore
est destiné à contenir les certificats d'autorité de certification auxquels vous êtes prêt à faire confiance lorsqu'une partie distante présente son certificat. Dans certains cas, ils peuvent être un seul et même magasin, bien qu'il soit souvent préférable d'utiliser des magasins distincts (en particulier lorsqu'ils sont basés sur des fichiers).la source
$JAVA_HOME/lib/security/cacerts
(voir le deuxième lien du guide de référence JSSE que j'ai envoyé). Comme les navigateurs, il contient un ensemble par défaut de certificats CA de confiance. En général, un client utilisera toujours un fichier de clés certifiées pour vérifier le certificat du serveur, mais le fichier de clés ne sera utilisé que si le serveur demande un certificat client, et le serveur utilisera toujours un fichier de clés pour sa propre clé + certificat, mais le fichier de clés de confiance ne sera utilisé si le client envoie un certificat client.Pour expliquer de manière usuelle / but commun ou de manière profane:
Pendant la prise de contact SSL,
Un client essaie d'accéder à https: //
Et ainsi, le serveur répond en fournissant un certificat SSL (qui est stocké dans son magasin de clés)
Maintenant, le client reçoit le certificat SSL et le vérifie via trustStore (c'est-à-dire que le trustStore du client a déjà un ensemble prédéfini de certificats auquel il fait confiance). Son genre: puis-je faire confiance à ce serveur? Est-ce le même serveur auquel j'essaie de parler? Pas d'attaques intermédiaires?
Une fois, le client vérifie qu'il parle au serveur auquel il fait confiance, la communication SSL peut alors se faire via une clé secrète partagée.
Remarque: je ne parle pas ici de l'authentification client côté serveur. Si un serveur souhaite également effectuer une authentification client, le serveur gère également un trustStore pour vérifier le client.
la source
Il n'y a aucune différence entre les fichiers de clés et les fichiers de clés certifiées. Les deux sont des fichiers au format de fichier JKS propriétaire. La distinction est dans l'utilisation: à ma connaissance, Java n'utilisera que le magasin référencé par la
-Djavax.net.ssl.trustStore
propriété système pour rechercher des certificats de confiance lors de la création de connexions SSL. Idem pour les clés et-Djavax.net.ssl.keyStore
. Mais en théorie, il est bon d'utiliser un seul et même fichier pour les fichiers de clés de confiance et.la source
javax.net.ssl.keyStoreType
etjavax.net.ssl.trustStoreType
.Le magasin de clés est utilisé par un serveur pour stocker les clés privées et Truststore est utilisé par un client tiers pour stocker les clés publiques fournies par le serveur pour y accéder. Je l'ai fait dans ma demande de production. Voici les étapes pour générer des certificats java pour la communication SSL:
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
la source
Ce sont les étapes pour créer un Truststore sur votre machine locale à l'aide de Keytool. Étapes pour créer un fichier de clés de confiance pour une URL dans votre ordinateur local.
1) Frappez l'url dans le navigateur en utilisant Chrome
2) Vérifiez le "i" icône à gauche de l'url dans le chrome et cliquez dessus
3) Vérifiez l' option de certificat et cliquez dessus et une boîte de dialogue s'ouvrira
4) vérifiez l' onglet "chemin du certificat" pour le nombre de certificats disponibles pour créer le truststore
5) Allez
"details" tab -> click"Copy to File" -> Give the path and the name for the certificate
vous souhaitez créer.6) Vérifiez s'il a des certificats parents et suivez le point "5" .
7) Une fois tous les certificats créés, ouvrez l'invite de commande et accédez au chemin d'accès où vous avez créé les certificats.
8) fournissez la commande Keytool ci-dessous pour ajouter les certificats et créer un fichier de clés certifiées.
9) Fournissez la commande keytool pour tous les certificats et ajoutez-les au magasin de clés de confiance.
la source
keystore stocke simplement les clés privées, tandis que truststore stocke les clés publiques. Vous souhaiterez 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 simple.
la source
En termes 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).
Le magasin de clés est nécessaire lorsque vous configurez côté serveur sur SSL, il est utilisé pour stocker le certificat d'identité du serveur, que le serveur présentera à un client lors de la connexion tandis que la configuration du magasin de clés de confiance côté client doit contenir pour que la connexion fonctionne. Si votre navigateur se connecte à un site Web via SSL, il vérifie le certificat présenté par le serveur par rapport à son magasin de confiance.
la source