web-dev-qa-db-fra.com

Vous n'avez pas besoin d'un mot de passe pour accéder à un truststore (créé avec le Java keytool)?

Je viens de créer un truststore avec le Java keytool (pour l'authentification de serveur d'un serveur qui n'a pas de certificat CA). Cependant, je viens de remarquer quelque chose d'étrange. Je démarre 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'essaye ceci:

Java -classpath <STUFF> Client

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


Je m'attendais à devoir passer 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? Et un magasin de clés?

30
sixtyfootersdude

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 illustre ce comportement (utilisez-le avec un mot de passe vide).

39
Pascal Thivent

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 laisser remplacer le contenu du magasin par un nouveau contenu, par exemple en supprimant les entrées de certificat existantes ou en ajoutant de nouvelles.

Bien sûr, si vous disposez d'un accès en écriture pour mettre à jour le fichier de clés à l'aide de keytool (ce n'est pas setuid), vous pouvez remplacer le contenu à l'aide d'un autre outil qui n'a pas vérifié le mot de passe. Et nous savons que le magasin et son format sont lisibles sans mot de passe, donc nous pouvons probablement y écrire ce que nous voulons.

C'est là qu'intervient le mot de passe de vérification. 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é falsifié ou non. De même, une personne malveillante qui ne connaît pas le mot de passe ne peut pas non plus modifier le contenu du magasin et produire le hachage de résumé qui serait produit par ce mot de passe.

C'est pourquoi lorsque vous fournissez aucun mot de passe, keytool vous avertit simplement qu'il ne peut pas vérifier que le magasin n'a pas été falsifié. Si vous fournissez un mot de passe invalide, ou si le magasin a a été falsifié, vous obtiendrez un message différent:

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

keytool n'a pas pu recréer le condensé 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 cela suppose que vous ou le logiciel lisant le magasin le sache.

Notez que si le terme keystore est généralement utilisé, il fait également référence à keystores et truststores. Moins généralement, un magasin de clés est plus souvent un magasin d'identités et contient des identités et leurs clés privées secrètes, telles qu'utilisées par ex. par un serveur exécutant HTTPS. Un truststore ne contient le plus souvent que des clés publiques et aucune clé privée, donc pas de secrets, mais il est important de déterminer les identités auxquelles un client fait confiance.

18
javabrett