web-dev-qa-db-fra.com

Le magasin de clés Android a cessé de fonctionner

Tout récemment, j'ai eu un problème avec un magasin de clés. Je sais qu'il y a déjà beaucoup de questions sur ce problème. Je les ai tous lus et googlé furieusement.

Erreur:

keytool error: Java.io.IOException: Keystore was tampered with, or password was incorrect
Java.io.IOException: Keystore was tampered with, or password was incorrect
    at Sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.Java:772)
    at Sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.Java:55)
    at Java.security.KeyStore.load(KeyStore.Java:1214)
    at Sun.security.tools.KeyTool.doCommands(KeyTool.Java:885)
    at Sun.security.tools.KeyTool.run(KeyTool.Java:340)
    at Sun.security.tools.KeyTool.main(KeyTool.Java:333)
Caused by: Java.security.UnrecoverableKeyException: Password verification failed
    at Sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.Java:770)
    ... 5 more

Logiciel que j'utilise:

Java

Java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

Éclipse

Version: 3.8.0
Build id: I20120502-2000

Dernier plugin ADT

Dernier SDK Android

Voici ce que je sais:

  • Je n'ai pas perdu le mot de passe et il n'a jamais changé.
  • Je ne peux pas récupérer le mot de passe (je connais le laissez-passer).
  • Je ne peux pas signer une application existante avec une clé différente sans libérer une nouvelle application (je ne peux donc publier aucune mise à jour).

Voici ce que j'ai fait:

  • J'ai désinstallé et réinstallé plusieurs fois Eclipse.
  • J'ai désinstallé et réinstallé le plug-in Android ADT.
  • J'ai supprimé et re-téléchargé le dernier SDK Android à plusieurs reprises.
  • J'ai désinstallé et réinstallé JDK7.
  • J'ai essayé d'utiliser les sauvegardes de mon magasin de clés.
  • J'ai vérifié les sommes de contrôle MD5 à l'aide de "md5sum KEYSTORE" et comparé aux sauvegardes (même sortie MD5 - non falsifiée).
  • J'ai essayé de forcer brutalement le magasin de clés (j'ai récupéré le mot de passe que je connaissais).
  • J'ai créé une clé de test (avec la configuration actuelle) et testé le mot de passe. Il semble bien fonctionner (quelque chose a donc changé).
  • J'ai essayé d'exporter Android .apk manuellement, puis j'ai essayé de le signer (en dehors d'Eclipse).

Voici comment exporter une application signée:

  • Through Eclipse: Exporter à l'aide de Fichier> Exporter> Exporter une application Android.
  • Avant JDK7: jarsigner -verbose -keystore KEYSTORE FILE ALIAS.
  • Avec JDK7: jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore KEYSTORE FILE ALIAS.

Que reste-t-il à comprendre ou à essayer?

  • Certaines des références/URL demandent de supprimer le fichier "trusted.certs"?
  • Essayez de supprimer le "debug.keystore"?
  • La mise à jour d'Eclipse ou de l'un des outils de développement Android affectera-t-elle mon magasin de clés?
  • La mise à jour de Java de jdk6 à jdk7 créerait-elle des problèmes?
  • Cela aurait-il pu gâcher ou changer le fonctionnement de jarsigner?

Suggestions d'utilisateurs:

  • Essayez d'utiliser JDK6, mais j'ai récemment pu exporter une application.
  • Vérifié key.store.password ou key.alias.password dans mon local.properties
  • Décocher automatiquement la construction dans Eclipse et nettoyer votre projet
  • Essayez de supprimer le dossier .metadata de votre espace de travail et d'effacer tous les dossiers temporaires.

Résumé

  • Les magasins de clés n'ont pas changé,
  • J'ai les mots de passe pour les magasins de clés,
  • J'ai récemment exporté avec succès une application à l'aide de:
    • Eclipse 3.8 (et Eclipse 4.0+),
    • Dernières Java 7,
    • Dernier plugin ADT.
  • Ma dernière exportation et construction réussie remonte à quelques semaines, avec Eclipse 3.8, les derniers outils Android et Java 7 avec le même mot de passe.

Mise à jour (29/06/14)

  • J'ai utilisé: keytool -list -keystore KEYSTORE pour prouver et montrer que 3 de mes 4 clés fonctionnent.
  • J'ai forcé la dernière clé et obtenu le mot de passe du magasin de clés (le passe que je connaissais déjà), mais le mot de passe ne fonctionne pas lorsque je signe pour la signature. J'ai utilisé: Java -jar AndroidKeystoreBrute_v1.02.jar -m 3 -k KEYSTORE -d WORDLIST.
  • Curieusement, parfois, lorsque je tape mon mot de passe dans Eclipse très rapidement, mon alias apparaît et je peux exporter avec succès mon application. (Je sais que c'est fou).
  • Version Java mise à jour.

Si je tape le mot de passe très rapidement, cela fonctionne parfois.

Il semble que l'ouverture d'Eclipse et la saisie du mot de passe la première fois me permettent d'utiliser le magasin de clés.

Évidemment, si tout le reste échoue, je devrai créer un nouveau magasin de clés. Je voudrais vraiment que cela soit résolu, je ne suis pas sûr de savoir quoi faire maintenant à part republier avec une nouvelle clé.

Si la clé ne peut pas être récupérée correctement, il est possible que je l’ouvre au source sur Github.


Solution (29/06/14):

Un merci spécial à l'utilisateur Erhannis!

Voici ce que j'ai fait:

La commande me tromperait à chaque fois: 

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v

Comme vous m'aviez dit que nous pouvions extraire des clés privées du keystore Java (.jks), j'ai creusé plus profondément et fini par utiliser une variante de la commande. J'ai suivi les liens que tu as postés ici et ici :

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -deststoretype pkcs12

Après avoir extrait la clé privée et l'avoir stockée sous le nom de PKCS12, je pense qu'elle a extrait ma clé privée et l'a réinsérée dans un tout nouveau keystore Java:

keytool -importkeystore -srckeystore new.keystore -srcstoretype pkcs12 -destkeystore final.keystore -deststoretype jks

Références:

http://developer.Android.com/tools/publishing/app-signing.html#signapp

http://code.google.com/p/Android-keystore-password-recover/

Liste des URL StackOverflow que j'ai lues:

Comment gérer un mot de passe KeyStore perdu dans Android?

Problème de fichier de clés non valide?

Android: j'ai perdu mon magasin de clés Android, que dois-je faire?

J'ai perdu mon fichier .keystore?

Mot de passe Keystore oublié, en pensant à la détection Brute-Force. va-t-il corrompre le magasin de clés?

J'ai perdu le mot de passe pour le fichier Keystore Android

Problème d'utilisation de mon magasin de clés signé et publié dans Eclipse

Android - Mot de passe oublié Puis-je déchiffrer le fichier de magasin de clés?

Problème de fichier de clés publié par Android: "Le fichier de clés a été falsifié ou le mot de passe est incorrect"

49
Jared Burrows

J'ai peut-être eu le même problème. Je n'ai jamais compris pourquoi il échouait (même si je me demandais si le mot de passe du magasin de clés était inférieur à 6 chiffres), mais j'ai pu copier ma clé dans un nouveau magasin de clés, que j'ai ensuite renommé pour remplacer l'ancien. et cela a mystérieusement fonctionné après cela (en utilisant les nouveaux mots de passe). J'avais besoin du mot de passe clé, au fait. Travailler hors https://security.stackexchange.com/a/3795 , j'ai fait ce qui suit:

  1. keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
  2. Entré deux fois le nouveau mot de passe du magasin de clés
  3. Frappé Enter quand il m'a demandé le mot de passe du magasin de clés source (laissé vide)
  4. Entré le mot de passe clé

Après avoir vérifié que le nouveau fonctionnait, je l’ai simplement copié sur l’ancien. J'espère que ça marche pour toi; bonne chance.

6
Erhannis

Essayez de supprimer le dossier .metadata de votre espace de travail et d'effacer tous les dossiers temporaires. Si votre fichier de clés n'est pas endommagé et que vous avez essayé de réinstaller correctement Eclipse, ADT, Android SDK et Java SDK, je ne vois pas d'autres causes possibles de ce problème étrange, à l'exception des fichiers cache .metadata et/ou d'une corruption temporaire.

Une autre suggestion

Essayez d’utiliser Portecle un utilitaire de gestion et d’examen des magasins de clés, des clés, des certificats, des demandes de certificat, des listes de révocation de certificats, etc.

3
Silverstorm

J'ai eu le même problème et j'ai essayé tout ce qui est suggéré dans ce fil, mais rien n'a pu enregistrer mon mot de passe alias. Le fait est que j'étais absolument sûr du mot de passe, car j'avais déjà mis à jour l'application quatre fois. Je recevais le "le magasin de clés a été falsifié ou le mot de passe était incorrect".

La solution

Il semble qu’à la création du fichier de clés à l’aide d’Eclipse, un espace ait été ajouté devant le mot de passe!

Ce bogue méchant a apparemment été corrigé dans une version ultérieure, ce qui m'a empêché de signer mon application avec le mot de passe que je pensais être le bon.

Sur la base de ce lien SO: Ant ne parvient pas à créer un apk signé après la mise à jour vers Android v20 Je vous suggère de essayez d'ajouter un caractère d'espacement avant ou après votre mot de passe.

2
Gerhat

Je vais suggérer quelques autres essais et essais.

Ayez de la patience pour les appliquer,

Pas:

  1. Décochez la construction automatiquement (Projet-> Construire automatiquement) dans Eclipse et nettoyez votre projet.
  2. Construisez-le à nouveau. (Clic droit sur le projet + Construire le projet)
  3. Projet d'exportation.
  4. Sélectionnez Exporter Android (automatiquement aligné pour vous).
  5. Choisis ta clé. fournir le mot de passe. alias devrait apparaître dans la liste (assurez-vous du verrouillage des majuscules). Parfois, nous donnons un mot de passe correct, mais à cause des majuscules, il échoue toujours;)
  6. Dites-moi si cela marche pour vous.

J'espère que cela vous aidera.

1
Ajay Kumar Meher

Enregistrez-vous des valeurs telles que key.store.password ou key.alias.password dans votre fichier local.properties? Est-ce que l'un ou l'autre est incorrect?

Je suis curieux de savoir si un bogue survient pour les clés créées avec JDK6 et vérifiées dans JDK7. Cela expliquerait pourquoi les nouvelles clés que vous avez créées pour les tests fonctionnent, mais l'ancienne ne fonctionne pas. Essayez de rétrograder en JDK6 et voyez si cela résout le problème. D'autres personnes ont eu des problèmes de contrôle dans JDK7 qui ont disparu lors de la mise à niveau 6. Si cela fonctionne, créez un rapport de bogue et demandez un correctif pour pouvoir effectuer une mise à niveau vers Java 7 en toute sécurité.

0
Alexander Lucas

J'ai également combattu ce problème récemment et j'ai essayé toutes les suggestions énumérées ici et ailleurs. Enfin identifié une erreur stupide qui causait cette erreur de ma part - je voulais partager ceci ici au cas où cela pourrait aider l’un de vous.

Ce sera probablement le cas si, comme moi, plusieurs versions de Java sont installées sur votre machine et que vous avez mis à niveau JRE/JDK entre le moment où vous avez initialement créé le magasin de clés et le moment où vous essayez de signer l'APK.

Pour une raison quelconque, nos instructions de compilation référençaient le chemin complet Java comme ceci:

C:\Progra ~ 1\Java\jdk1.6.0_45\bin\jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve

L'une des suggestions ci-dessus m'a fait penser qu'il ne s'agissait peut-être pas d'un problème de mot de passe, ni d'incompatibilités de version. J'ai donc lancé la commande ci-dessous:

keytool -list -keystore cre80ve.keystore

En utilisant le mot de passe que je savais être correct, et voilà, cela a confirmé que c'était le bon mot de passe.

J'ai ensuite supprimé la référence explicite dans le chemin d'accès à la version plus ancienne de Java. Cela a permis de récupérer automatiquement la dernière version de Java (jdk1.8.0_31 dans mon cas):

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve

Et tout a commencé à bien fonctionner! 

Bottomline: il ne s'agit peut-être pas d'un problème de mot de passe, mais de versions différentes de Java ou du SDK Android à l'origine du problème, alors n'oubliez pas de vérifier cela. 

Et une fois que cela fonctionne, n'oubliez pas de sauvegarder votre magasin de clés et votre mot de passe dans un endroit sûr :-)

0
Nik Sanghvi

Je viens d'avoir ce problème - tout à coup, Android Studio a oublié mes mots de passe et n'utilise plus ceux que j'avais dans le fichier Gradle. J'ai le même fichier de clé et les mêmes mots de passe dans le même projet depuis 6 ans! 

Je les ai donc entrées manuellement - mais la vérification échouait maintes fois. J'ai essayé des choses telles que l'invalidation des caches, le redémarrage d'Android Studio et la restauration d'une sauvegarde du magasin de clés, mais rien n'y fait. 

Enfin, en désespoir de cause, j'ai essayé de changer le mot de passe du magasin de clés et le mot de passe de la clé. Ouais, ça a marché! Il s'avère que j'avais changé les mots de passe lorsque je les avais saisis dans le fichier de compilation de Gradle il y a quelques années et, pour une raison quelconque, je ne l'ai jamais remarqué. 

Conclusion: ne jamais être sûr à 100% que vous le faites bien.

0
Magnus W

Mon alias de clé a cessé de fonctionner soudainement. (Ok, après quelques mises à jour d'Android Studio et Java).

J'ai essayé toutes les solutions de ce fil ainsi que d'autres. Dans mon cas, la solution était surprenante ... J'ai le magasin de clés avec peu de pseudonymes. Aucun ne fonctionnait sauf un, dont le mot de passe était identique à keystore. Mais malheureusement, ce n'était pas celui dont j'avais besoin. Cela m'a fait penser sans aucune logique impliquée . J'ai copié un alias unique vers un nouveau magasin de clés avec

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -srcalias importantalias

Et puis j'ai changé le mot de passe alias pour qu'il soit identique au mot de passe du magasin de clés avec:

keytool -keypasswd -keystore new.keystore -alias importantalias

Finalement, j'ai pu signer mon apk… .. Cela ressemble à un bêtise qui peut perdre une journée de développement.

0
Malak Pete