Совсем недавно у меня возникла проблема с хранилищем ключей. Я знаю, что по этой проблеме уже есть много вопросов. Я прочитал их все и яростно гуглил.
Ошибка:
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 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.
- Я удалял и повторно скачивал последний Android SDK много раз.
- Я удалил и переустановил JDK7.
- Я пробовал использовать резервные копии своего хранилища ключей.
- Я проверил контрольные суммы MD5 с помощью «md5sum KEYSTORE» и сравнил их с резервными копиями (тот же результат MD5 - без подделок).
- Я пробовал подобрать хранилище ключей (я получил пароль, который знал).
- Я создал тестовый ключ (с текущими настройками) и проверил пароль, и, похоже, он работал нормально (так что что-то изменилось).
- Я попытался вручную экспортировать android .apk, а затем попытался подписать его (вне Eclipse).
Вот как я экспортирую подписанное приложение:
- Через Eclipse: экспорт с помощью "Файл"> "Экспорт"> "Экспорт приложения Android".
- До JDK7: jarsigner -verbose -keystore KEYSTORE ФАЙЛОВ НИКНЕЙМЫ.
- С JDK7: jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore KEYSTORE FILE ALIAS.
Что еще предстоит выяснить или попробовать?
В некоторых ссылках / URL-адресах говорится, что нужно удалить файл "trust.certs"?Попробуйте удалить "debug.keystore"?Повлияет ли обновление Eclipse или любого из инструментов разработки Android на мое хранилище ключей?Не вызовет ли обновление Java с jdk6 до jdk7 какие-либо проблемы?Могло ли это повлиять или изменить работу jarsigner'а?
Предложения пользователей:
- Попробуйте использовать JDK6, но недавно мне удалось экспортировать приложение.
Проверено key.store.password или key.alias.password в моих local.propertiesАвтоматическое снятие флажка сборки в eclipse и очистка вашего проектаПопробуйте удалить папку .metadata в своей рабочей области и очистить все временные папки.
Резюме
- Хранилища ключей не менялись,
- У меня есть пароли к хранилищам ключей,
- I have successfully exported an application recently using:
- Eclipse 3.8 (and Eclipse 4.0+),
- Последняя версия Java 7,
- Последний плагин ADT.
- Мой последний успешный экспорт и сборка были несколько недель назад с использованием Eclipse 3.8, последних инструментов Android и Java 7 с тем же паролем.
Обновление (29.06.14)
- Я использовал: keytool -list -keystore KEYSTORE, чтобы успешно доказать и показать, что 3 из моих 4 ключей работают.
- Я взломал последний ключ и получил пароль из хранилища ключей (проход, который я уже знал), но пароль не работает, когда я вхожу для подписи. Я использовал: java -jar AndroidKeystoreBrute_v1.02.jar -m 3 -k KEYSTORE -d WORDLIST.
- Как ни странно, иногда, когда я очень быстро набираю свой пароль в eclipse, появляется мой псевдоним, и я могу успешно экспортировать свое приложение. (Я знаю, что это безумие).
- Обновленная версия Java.
Если я ввожу пароль очень быстро, иногда это срабатывает.
Кажется, что открытие Eclipse и первый ввод пароля позволяет мне использовать хранилище ключей.
Очевидно, если все остальное не поможет, мне придется создать новое хранилище ключей. Я действительно хотел бы решить эту проблему, я просто не уверен, что теперь делать, кроме повторной публикации с новым ключом.
Если ключ не может быть восстановлен должным образом, я могу открыть его исходный код на Github.
Решение (29.06.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, которые я прочитал:
Как справиться с утерянным паролем KeyStore в Android?
Недопустимая проблема с хранилищем ключей?
Android: я потерял хранилище ключей Android, что что мне делать?
Я потерял свой файл .keystore?
Забыли пароль хранилища ключей, думая о Brute- Обнаружение силы. это повредит хранилище ключей?
Я потерял пароль для файла хранилища ключей Android
Проблема с запуском моего подписанного хранилища ключей выпуска в Eclipse
Android - Забыли пароль к хранилищу ключей. Могу ли я расшифровать файл хранилища ключей?
Проблема с хранилищем ключей версии Android: хранилище ключей было подделано с, или пароль неверный