N'avez-vous pas besoin d'un mot de passe pour accéder à un truststore (fait avec le keytool java)?

Je viens de créer un truststore avec le keytool java (pour l'authentification du serveur d'un serveur qui n'a pas de certificat CA). Cependant je viens de remarquer quelque chose d'étrange. Je commence mon client comme ceci:

java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client

(Remarque: Il n'y a pas de mot de passe spécifié)

L'appel ci-dessus fonctionne.


Cependant quand j'essaie ceci:

java -classpath <STUFF> Client

Ça ne marche pas. (Évidemment, cela ne fonctionne pas, cela nécessite le truststore).


Je m'attendais à avoir besoin de passer dans cette option (mais je ne l'ai pas fait):

-Djavax.net.ssl.trustStorePassword=mypass

Question: N'avez-vous pas besoin d'un mot de passe pour accéder à un truststore? Le mot de passe est-il juste pour la modification? Que penser d'un fichier de clés?

21
demandé sur sixtyfootersdude 2010-02-26 20:58:19

4 réponses

Le mot de passe est utilisé pour protéger l'intégrité d'un magasin de clés. si vous ne fournissez aucun mot de passe de magasin, vous pouvez toujours lire le contenu du magasin de clés. La commande keytool -list démontre ce comportement (utilisez - le avec un mot de passe vide).

34
répondu Pascal Thivent 2010-03-01 16:00:51

En plus de l'excellente réponse de @pascal-thivent:

Le mot de passe du magasin de clés a deux objectifs: s'il n'est pas fourni, keytool refuse de vous permettre de remplacer le contenu du magasin par de nouveaux contenus, par exemple en supprimant des entrées de certificat existantes ou en ajoutant de nouvelles entrées de certificat.

Bien sûr, si vous avez un accès en écriture pour mettre à jour le fichier keystore en utilisant keytool (ce n'est pas setuid), vous pouvez remplacer le contenu en utilisant un autre outil qui ne vérifie pas le mot de passe. Et nous savons que le magasin et son format est lisible sans mot de passe, donc vraisemblablement nous pouvons écrire ce que nous voulons là-bas.

C'est là que le mot de passe de vérification entre en jeu. Lorsque les entrées du magasin sont écrites, le mot de passe du magasin fourni est utilisé pour calculer un résumé du contenu du magasin, tel que salé par le mot de passe. Il s'agit d'un hachage/résumé à Sens Unique, donc sans le mot de passe, vous ne pouvez pas vérifier si le contenu du magasin a été altéré ou non. De même, quelqu'un de malveillant qui ne connaît pas le mot de passe ne peut pas non plus modifier le contenu du magasin et produire le condensé-hachage qui serait produit par ce mot de passe.

C'est pourquoi lorsque vous fournissez no-password, keytool Vous avertit simplement qu'il ne peut pas vérifier que le magasin n'a pas été altéré. Si vous fournissez un mot de passe invalide, ou si le magasin a {[16] } été altéré, vous obtiendrez un message différent:

Enter keystore password: keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect

keytool impossible de recréer le résumé de hachage existant en fonction du contenu actuel du magasin et du mot de passe que vous avez fourni, donc soit le mot de passe est incorrect, soit le magasin de clés est compromis - keytool ne peut pas le dire, mais il suppose que vous ou le logiciel qui lit le magasin le sait.

Notez que si le terme keystore est généralement utilisé, il se réfère également à keystoreset truststores. Moins-généralement, un keystore est plus souvent un identity store {[16] } et contient des identités et leurs clés privées secrètes, telles qu'utilisées par exemple par un serveur exécutant HTTPS. Un truststore contient plus souvent que des clés publiques et pas de clés privées, donc pas de secrets, mais il est important de déterminer quelles identités un client fait confiance.

12
répondu javabrett 2016-05-20 06:11:10

Par défaut, le mot de passe du magasin de confiance JRE est "changeit". Si vous souhaitez modifier le mot de passe du magasin de confiance par défaut (cacerts) par programme en utilisant Java, veuillez passer par ce lien .

-1
répondu thulasiram p 2015-04-09 14:27:53

Si vous ne spécifiez pas de truststore, celui par défaut est utilisé à la place. Je suppose, vous obtenez une erreur, que vous devrez spécifier un truststore afin de faire confiance à l'hôte que vous demandez? Le truststore par défaut réside dans $ JAVA_HOME / lib / security / jssecacerts.

-2
répondu cafebabe 2010-02-26 20:57:07