Хранилище ключей Android перестало работать

совсем недавно у меня была проблема с ключом магазин. Я знаю, что есть много вопросов об этой проблеме уже. Я прочитал их все и яростно погуглил.

ошибка:

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

программное обеспечение, которое я использую:

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)

затмение

Version: 3.8.0
Build id: I20120502-2000

последний плагин ADT

последние Android SDK

вот что я знаю:

  • я не потерял пароль, и он имеет никогда не менять.
  • я не могу получить пароль (я знаю пропуск).
  • я не могу подписать существующее приложение с другим ключом, не выпустив новое приложение (поэтому я не могу публиковать обновления).

вот что я сделал:

  • я удалил и повторно установил Eclipse много раз.
  • я удалил и переустановил плагин Android ADT.
  • я удалил и повторно загружен lastest Android SDK много раз.
  • я удалил и переустановил JDK7.
  • я попытался использовать резервные копии моего хранилища ключей.
  • я проверил контрольные суммы MD5 с помощью "хранилища ключей md5sum" и по сравнению с резервными копиями(тот же вывод MD5 - не подделан).
  • я попробовал грубое принуждение хранилища ключей (я получил пароль, который я знал).
  • я создал тестовый ключ (с текущей настройкой) и протестировал пароль и кажется, он работал нормально (так что что-то изменилось).
  • я попытался экспортировать android .apk вручную, а затем попытался подписать его (вне Eclipse).

вот как я экспортирую подписанное приложение:

  • Через Eclipse: экспорт с помощью файла > экспорт > Экспорт приложения для Android.
  • до JDK7: JARSIGNER-verbose-keystore псевдоним файла хранилища ключей.
  • с JDK7: jarsigner-verbose-sigalg MD5withRSA-digestalg SHA1-keystore псевдоним файла хранилища ключей.

что осталось выяснить или попробовать?

  • некоторые ссылки / URL-адреса говорят, чтобы удалить " trusted.сертификаты файл"?
  • Попробуйте удалить " debug.хранилище"?
  • обновление Eclipse или любого из инструментов разработки Android повлияет на мой хранилище ключей?
  • будет ли обновление Java от jdk6 до jdk7 создавать какие-либо проблемы?
  • могло ли это испортить или изменить, как работает jarsigner в любом случае?

предложения пользователя:

  • попробуйте использовать JDK6, но я недавно смог экспортировать приложение.
  • проверил ключ.магазин.пароль или ключ.псевдоним.пароль в моем локальном.свойства
  • снимите флажок Автоматически строить в eclipse и очистите свой проект
  • Попробуйте удалить .папка метаданных в рабочей области и очистите все временные папки.

резюме

  • хранилища ключей не менял,
  • у меня есть пароли от хранилищ,
  • недавно я успешно экспортировал приложение, используя:
    • затмение 3.8 (и Eclipse 4.0+),
    • Последние Java 7,
    • последний плагин ADT.
  • мой последний успешный экспорт и сборка были несколько недель назад, используя Eclipse 3.8, последние инструменты Android и Java 7 с тем же паролем.

обновление (6/29/14)

  • я использовал: keytool-list-keystore хранилище ключей чтобы успешно доказать и показать, что 3 из моих 4 ключей работают.
  • я bruteforced Последний ключ и получил пароль из хранилища ключей (пропуск я уже знал), но пароль не работает, когда я вхожу для подписания. Я использовал: java-jar AndroidKeystoreBrute_v1.02.Джар - m 3-k KEYSTORE - D список слов.
  • как ни странно, иногда, когда я набираю свой пароль в eclipse очень быстро, мой псевдоним появится, и я смогу успешно экспортировать свое приложение. (Я знаю, что это безумие).
  • Обновлена Java версия.

если я набираю пароль очень быстро, он иногда работает.

кажется, что открытие Eclipse и ввода пароля в первый раз позволяет мне использовать хранилище ключей.

очевидно, если все остальное не удастся, мне придется создать новое хранилище ключей. Я действительно хотел бы, чтобы это было решено, я просто не уверен, что делать сейчас, кроме переиздания с новым ключом.

если ключ не может быть восстановлен должным образом, я могу открыть исходный код на На GitHub.


решение (6/29/14):

особая благодарность пользователю Erhannis!

вот что я сделал:

команда будет ошибаться на меня каждый раз:

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

так как вы сказали мне, что мы можем извлечь закрытые ключи из хранилища ключей Java(.jks), я копнул глубже и в конечном итоге использовал вариант команды. Я следил за ссылками, которые вы разместили здесь и здесь:

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

после извлекая закрытый ключ и сохраняя его как PKCS12, я думаю, что извлек мой закрытый ключ и вернул его в новое хранилище ключей Java:

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

ссылки:

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

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

список URL-адресов StackOverflow, которые я прочитал:

как обращаться с потерянным Пароль хранилища ключей в Android?

недопустимая проблема хранилища ключей?

Android: я потерял свой магазин ключей android, что мне делать?

я потерял .файл keystore?

забыл пароль хранилища ключей, думая об обнаружении грубой силы. это повредит хранилище ключей?

я потерял пароль для хранилища ключей android файл

проблема с запуском моего подписанного хранилища ключей в Eclipse

Android-Забыли пароль хранилища ключей. Можно ли расшифровать файл хранилища ключей?

Android релиз keystore вопрос: "Keystore был подделан, или пароль был неправильным"

8 ответов


возможно, у меня была такая же проблема. Я никогда не понимал, почему он терпел неудачу (хотя мне интересно, было ли это потому, что пароль хранилища ключей был короче 6 цифр), но я смог скопировать свой ключ в новое хранилище ключей, которое я затем переименовал, чтобы заменить старый, и он таинственно работал после этого (используя новые пароли). Кстати, мне нужен был пароль. Отработка https://security.stackexchange.com/a/3795 я сделал следующий:

  1. keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
  2. дважды вводил новый пароль хранилища ключей
  3. нажмите Enter когда он попросил у меня исходный пароль хранилища ключей (оставил его пустым)
  4. введен пароль

после двойной проверки того, что новый работал, я просто скопировал его поверх старого. Надеюсь, это сработает для вас; удачи.


Попробуйте удалить .метаданные папка в рабочей области и очистите все временные папки. Если ваш файл keystore не поврежден и вы пытались переустановить Eclipse, ADT, Android SDK и Java SDK правильно, я не вижу других возможных причин для этой странной проблемы, исключая .файлы кэша метаданных и\или некоторые временные повреждения.

еще одно предложение

попробуйте использовать Portecle утилита для управления и изучения хранилищ, ключи, сертификаты, запросы сертификатов, списки отзыва сертификатов и т. д.


У меня была та же проблема, и я попробовал все, что предлагается в этом потоке, но ничто не смогло сохранить мой пароль псевдонима. Дело в том, что я был абсолютно точно о пароле, так как я обновил приложение уже четыре раза. Я получал "хранилище ключей было изменено, или пароль был неправильным" сообщение.

решение

похоже, что при создании хранилища ключей с помощью Eclipse, пробел был добавлен перед паролем!

эта неприятная ошибка была, по-видимому, исправлена в более поздней версии, в результате чего я не смог подписать свое приложение паролем, который я считал правильным.

на основе этой ссылки SO:Ant не удается построить подписанный apk после обновления до android v20 я бы посоветовал вам попробуйте добавить пробел после пароля.


Я предложу еще пару тепла и испытаний.

имейте терпение, чтобы применить их,

действия:

  1. автоматически отключите сборку (Project - > Build Automatically) в eclipse и очистите свой проект.
  2. снова его построить.(Щелкните правой кнопкой мыши на project + Build Project)
  3. Экспорт Проекта.
  4. Выберите Экспорт Android.(авто выровнены для вас)
  5. выберите ключ. введите пароль. псевдоним должен прийти в список.(Будьте уверены в caps lock). Иногда мы даем правильный пароль, но из-за колпачков он всегда терпит неудачу;)
  6. Дайте мне знать, если это работает для вас.

надеется, что это поможет вам.


вы храните такие значения, как key.магазин.пароль или ключ.псевдоним.пароль в вашем локальном.файл свойств? Либо эти неправильные?

Мне любопытно, есть ли какая - то ошибка, которая возникает для ключей, созданных с помощью JDK6 и проверенных в JDK7-это объяснило бы, почему новые ключи, созданные для тестирования, работают, но старый нет. Попробуйте понизить рейтинг до JDK6 и посмотреть, исправит ли это - у других были проблемы с jarsigner в JDK7, которые ушли, когда они снизились до 6. Если это сработает, файл отчета об ошибке и требовать патч, так что вы можете безопасно перейти на Java 7:)


недавно я также боролся с этой проблемой и пробовал все предложения, перечисленные здесь и в других местах. Наконец, определил глупую ошибку, которая вызывала эту ошибку с моей стороны - я хотел поделиться этим здесь, если это поможет кому-либо из вас.

Это более вероятно, если у вас, как и у меня, есть несколько версий Java на вашем компьютере и обновили JRE / JDK между тем, как вы изначально создали хранилище ключей, и теперь, когда вы пытаетесь подписать APK.

для некоторых причина, наши инструкции по компиляции ссылались на полный путь Java следующим образом:

C:\Progra~1\Java\jdk1.6.0_45\bin\jarsigner-verbose-sigalg SHA1withRSA-digestalg SHA1-хранилище ключей cre80ve.хранилище ключей без подписи.apk cre80ve

одно из предложений выше заставило меня подумать, что это может быть вообще не проблема с паролем, и это может быть несовместимость версий, вызывающая проблему. Поэтому я выполнил следующую команду:

ключей -списке -ключей cre80ve.хранилища ключей

используя пароль, который я знал, был правильным, и вот, он подтвердил, что это был правильный пароль.

затем я отбросил явную ссылку в пути к (старой) версии Java. Это заставило его автоматически подобрать последнюю версию Java (jdk1.8.0_31 в моем случае):

jarsigner-verbose-sigalg SHA1withRSA-digestalg SHA1-хранилище ключей cre80ve.хранилище ключей без подписи.apk cre80ve

и все начало работать прекрасно!

Bottomline: это может быть не проблема с паролем вообще, но различные версии Java или Android SDK вызывают проблему, поэтому не забудьте проверить это.

и как только он начнет работать, не забудьте сделать резервную копию хранилища ключей и пароля в безопасном месте: -)


мой псевдоним ключа остановился, работая sudenly. (Хорошо, после нескольких обновлений Android Studio и Java).

Я пробовал все решения из этого потока, а также из других. В моем случае решение оказалось неожиданным. У меня есть хранилище ключей с несколькими псевдонимами. Никто не работал, кроме одного, у которого был пароль, такой же, как keystore. Но, к сожалению, это было не то, что мне нужно. Это заставило меня думать без логики. Я скопировал один псевдоним в новое хранилище ключей с помощью

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

и затем Я изменил пароль псевдонима на тот же, что и пароль хранилища ключей:

keytool -keypasswd -keystore new.keystore -alias importantalias

наконец - то я смог подписать свой apk. Это похоже на глупую ошибку, которая может потратить день на разработку.


просто была эта проблема-внезапно Android Studio забыл мои пароли и не использовал те, которые у меня были в файле gradle. У меня был тот же файл ключей и пароли в том же проекте в течение 6 лет!

поэтому я ввел их вручную, но это не удалось проверить раз за разом. Я попробовал некоторые вещи, такие как аннулирование кэшей, перезапуск Android Studio и восстановление резервной копии хранилища ключей, но ничего не помогло.

наконец в чистом отчаянии я попытался переключить пароль хранилища ключей и пароль ключа. И вот-сработало! Оказывается, я поменял пароли, когда ввел их в файл сборки Gradle несколько лет назад, и по какой-то причине я этого не заметил.

вывод: никогда не будьте на 100% уверены, что вы делаете это правильно.