web-dev-qa-db-fra.com

Vérifiez l'exactitude de Android keystore keypore

J'automatise certaines choses qui impliquent le Android keytool et jarsigner. L'outil prend un fichier de clés, le mot de passe pour le fichier de clés, le nom d'alias et le mot de passe pour l'alias/clé, et je J'essaie de trouver un moyen de vérifier explicitement si le mot de passe fourni pour l'alias/clé est correct.

Des idées? En outre, je dois le vérifier sans fichier jar à signer - obtenir ce fichier dans mon contexte est long, donc je veux abandonner le plus tôt possible.

35
Narfanator

Vous pouvez également vérifier si le mot de passe est correct sans tenter de changer le mot de passe. Je l'ai fait en listant les propriétés du magasin de clés avec cette commande:

keytool -list -keystore <keystorefile> -storepass <passwordtocheck>
60
Jeff LaFay

Vous pouvez le faire de deux manières:

A. Avec keytool

Si vous exécutez la commande keytool -keypasswd -keystore <keystore> -alias <alias> -storepass <storepass> -keypass <keypass> -new <keypass> alors vous obtiendrez l'erreur Keystore was tampered with, or password was incorrect si le mot de passe du fichier de clés est incorrect ou si l'erreur Cannot recover key si le mot de passe de l'alias est incorrect. Malheureusement, le code retour est 1 dans les deux cas, vous devrez donc analyser la sortie du programme si vous voulez être intelligent sur le type d'erreur.

B. Avec un petit programme Java

Quelque chose dans ce sens:

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

try (FileInputStream fis = new FileInputStream(keystore)) {
    ks.load(fis, ksPw.toCharArray());
}

ks.getEntry(alias, new KeyStore.PasswordProtection(aliasPw.toCharArray()));

échouera à la ligne 4 avec un Java.io.IOException si le mot de passe du magasin de clés est incorrect, ou avec un Java.security.UnrecoverableKeyException à la ligne 7 si le mot de passe d'alias est incorrect.

21
rxg