N'êtes-vous pas besoin d'un mot de passe pour accéder à un truststore (fait avec l'outil clé java)?

StackOverflow https://stackoverflow.com/questions/2343691

Question

Je viens de créer un truststore avec l'outil clé java (pour l'authentification du serveur d'un serveur qui ne dispose pas d'un 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

(Note: il n'y a pas un mot de passe spécifié)

L'appel ci-dessus fonctionne.


Mais quand j'essaie ceci:

java -classpath <STUFF> Client

Il ne fonctionne pas. (Il est évident que cela ne fonctionne pas il faut truststore).


Je comptais besoin de passer dans cette option (mais je ne l'ai pas):

-Djavax.net.ssl.trustStorePassword=mypass

Question : Avez-vous pas besoin d'un mot de passe pour accéder à un truststore? Est-ce le mot de passe que pour la modification? Qu'en est-il un keystore?

Était-ce utile?

La solution

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

Autres conseils

En plus d'une excellente réponse de @ pascals-Thivent:

Le mot de passe keystore a deux objectifs - si non fourni, keytool refuse de vous laisser remplacer le contenu du magasin avec un nouveau contenu par exemple en supprimant existantes ou l'ajout de nouvelles entrées de certificat.

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

C'est là le mot de passe de vérification vient en. Lorsque les entrées de magasins sont écrits-out, le mot de passe magasin fourni est utilisé pour calculer un condensé des magasins-contenu, comme viande salée par le mot de passe. Ceci est un hachage / digest à sens unique, sans le mot de passe, vous ne pouvez pas vérifier si le contenu du magasin ont été falsifiés ou non. De même, une personne malveillante qui ne connaît pas le mot de passe aussi ne peut pas modifier le contenu du magasin et produire le digest-hachage qui serait produit par ce mot de passe.

C'est pourquoi, lorsque vous fournissez sans mot de passe, vous avertit keytool juste qu'il ne peut pas vérifier que le magasin n'a pas été falsifié. Si vous fournissez un invalide mot de passe ou le magasin a 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 hachage existant digérer en fonction du contenu du magasin en cours et le mot de passe que vous avez fourni, donc soit le mot de passe est incorrect ou le fichier de clés est compromise - keytool ne peut pas dire, mais il suppose que vous ou logiciel de lecture du magasin sait.

Notez que si le terme keystore est généralement utilisé, il se réfère également à keystores et clés certifiées . Moins généralement, keystore est un magasin d'identité plus souvent et contient des identités et leur secret, les clés privées, comme par exemple utilisé par un serveur exécutant HTTPS. truststore contient plus souvent que les clés publiques et privées, pas de clés donc pas de secret, mais est important de déterminer les identités client fiducies.

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

Par défaut, le mot de passe de magasin de confiance est JRE « changeit ». Si vous voulez changer le magasin de confiance par défaut (cacerts) en utilisant le mot de passe par programme Java, alors s'il vous plaît passer par ce lien .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top