- Android-хранилище ключей перестало работать
- Ошибка:
- Программное обеспечение, которое я использую:
- Затмение
- Последний плагин ADT
- Последние Android SDK
- Вот что я знаю:
- Вот что я сделал:
- Вот как я экспортирую подписанное приложение:
- Что осталось выяснить или попробовать?
- Предложения пользователей:
- Резюме
- Обновление (6/29/14)
- Решение (6/29/14):
- Рекомендации:
- Список URL-адресов StackOverflow, которые я прочитал:
- Решение
- Vardhan Blog — My Experiences
- Pages
- Thursday, May 17, 2012
- Android : Solution «install parse failed no certificates»
- 41 comments :
Android-хранилище ключей перестало работать
Совсем недавно у меня была проблема с хранилищем ключей. Я знаю, что есть много вопросов об этой проблеме. Я прочитал их все, и яростно разозлился.
Ошибка:
Программное обеспечение, которое я использую:
Затмение
Последний плагин ADT
Последние Android SDK
Вот что я знаю:
- Я не потерял пароль, и он никогда не менялся.
- Я не могу получить пароль (я знаю пропуск).
- Я не могу подписывать существующее приложение с другим ключом, не выпуская совершенно новое приложение (поэтому я не могу публиковать какие-либо обновления).
Вот что я сделал:
- Я удалил и повторно установил Eclipse много раз.
- Я удалил и переустановил плагин Android ADT.
- Я удалил и повторно загрузил последнюю версию Android SDK много раз.
- Я удалил и переустановил JDK7.
- Я попытался использовать резервные копии своего хранилища ключей.
- Я проверил контрольные суммы MD5 с помощью «md5sum KEYSTORE» и сравнил с резервными копиями (тот же вывод MD5 – не подделал).
- Я пробовал принудительно использовать хранилище ключей (я получил пароль, который знал).
- Я создал тестовый ключ (с текущей настройкой) и протестировал пароль, и, похоже, он работал нормально (так что-то изменилось).
- Я попытался экспортировать android .apk вручную, а затем попытался подписать его (Вне Eclipse).
Вот как я экспортирую подписанное приложение:
- Через Eclipse: Экспорт файла> Экспорт> Экспорт приложений для Android.
- Перед JDK7: jarsigner -verbose -keystore KEYSTORE FILE ALIAS.
- С JDK7: jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore KEYSTORE FILE ALIAS.
Что осталось выяснить или попробовать?
Некоторые ссылки / URL-адреса говорят об удалении файла «trusted.certs»?Попробуйте удалить «debug.keystore»?Будет ли обновление Eclipse или любого из инструментов разработки Android повлиять на мое хранилище ключей?Будет ли обновление Java от jdk6 до jdk7 создавать какие-либо проблемы?Может ли это испортиться или измениться, как работает jarsigner?
Предложения пользователей:
- Попробуйте использовать JDK6, но я смог недавно экспортировать приложение.
Проверено key.store.password или key.alias.password в моих local.propertiesСнятие автоматической установки в затмение и очистка вашего проектаПопробуйте удалить папку .metadata в рабочей области и очистить все временные папки.
Резюме
- Кейсторы не изменились,
- У меня есть пароли к хранилищам ключей,
- Недавно я успешно экспортировал приложение, используя:
- Eclipse 3.8 (и Eclipse 4.0+),
- Последние Java 7,
- Последний плагин ADT.
- Мой последний успешный экспорт и сборка была несколько недель назад с использованием Eclipse 3.8, новейших инструментов Android и Java 7 с тем же паролем.
Обновление (6/29/14)
- Я использовал: keytool -list -keystore KEYSTORE, чтобы успешно доказать и показать, что 3 из моих 4-х клавиш работают.
- Я проверил последний ключ и получил пароль из хранилища ключей (прохождение, которое я уже знал), но пароль не работает, когда я вхожу для подписания. Я использовал: java -jar AndroidKeystoreBrute_v1.02.jar -m 3 -k KEYSTORE -d WORDLIST .
- Как ни странно, иногда, когда я набираю свой пароль в eclipse очень быстро, мой псевдоним будет отображаться, и я могу успешно экспортировать свое приложение. (Я знаю, что это сумасшествие).
- Обновленная версия Java.
Если я набираю пароль очень быстро, он работает, иногда.
Кажется, что открытие Eclipse и ввод пароля в первый раз позволяет мне использовать хранилище ключей.
Очевидно, что если все остальное не удастся, мне придется создать новый магазин ключей. Я действительно хотел бы, чтобы это было разрешено, я просто не уверен, что делать теперь, кроме того, чтобы повторно опубликовать новый ключ.
Если ключ не может быть восстановлен должным образом, я могу открыть его на Github.
Решение (6/29/14):
Особая благодарность пользователю Erhannis!
Вот что я сделал:
Команда каждый раз меня выдавала:
Поскольку вы сказали мне, что мы можем извлекать секретные ключи из Java Keystore (.jks), я углубляюсь и заканчиваю тем, что использовал вариацию команды. Я следил за ссылками, которые вы разместили здесь и здесь :
После извлечения секретного ключа и хранения в виде PKCS12, я думаю, извлек свой закрытый ключ и вернул его в совершенно новый Java Keystore:
Рекомендации:
Список URL-адресов StackOverflow, которые я прочитал:
Как обрабатывать потерянный пароль KeyStore в Android?
Недопустимая проблема с Keystore?
Android: я потерял свой магазин ключей для Android, что мне делать?
Я потерял файл .keystore?
Забыл пароль Keystore, думая об обнаружении Brute-Force. Это повредит хранилище ключей?
Я потерял пароль для файла андроида Keystore
Проблема с запуском моего подписанного хранилища ключей в Eclipse
Android – Забыл пароль хранилища ключей. Могу ли я дешифровать файл хранилища ключей?
Проблема с хранилищем выпусков для Android: «У Keystore было вмешательство или неверный пароль»
Возможно, у меня была такая же проблема. Я никогда не понимал, почему он терпит неудачу (хотя мне интересно, было ли это потому, что пароль хранилища ключей был короче 6 цифр), но я смог скопировать мой ключ в новое хранилище ключей, которое затем переименовал, чтобы заменить старый, И это загадочно сработало после этого (используя новые пароли). Между прочим, нужен ключевой пароль. Работая с https://security.stackexchange.com/a/3795 , я сделал следующее:
- keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
- Дважды введите новый пароль хранилища ключей.
- Нажмите Enter, когда он попросит у меня пароль источника ключей (оставил его пустым)
- Введен пароль ключа
После двойной проверки, что новая работала, я просто скопировал ее поверх старой. Надеюсь, это сработает для вас; удачи.
Попробуйте удалить папку .metadata в рабочей области и очистить все временные папки. Если ваш файл хранилища ключей не поврежден, и вы пытались переустановить Eclipse, ADT, SDK SDK и Java SDK правильно, я не вижу других возможных причин для этой странной проблемы, исключая файлы кеша metadata и \ или некоторые временные повреждения.
Еще одно предложение
Попробуйте использовать утилиту Portecle для управления и проверки хранилищ ключей, ключей, сертификатов, запросов сертификатов, списков отзыва сертификатов и т. Д.
Я предложу пару жаров и испытаний.
Имейте терпение применять их,
- Раскройте сборку автоматически (Project-> Build Automatically) в eclipse и очистите свой проект.
- Постройте его снова. (Щелкните правой кнопкой мыши проект + Build Project)
- Экспорт проекта.
- Выберите «Экспорт Android» (автоматически выровненный для вас)
- Выберите свой ключ. Укажите пароль. В список должен войти псевдоним (убедитесь в блокировке колпачков). Иногда мы даем правильный пароль, но из-за шапок он всегда терпит неудачу;)
- Дайте мне знать, если это сработает для вас.
Надеюсь, это поможет вам.
У меня была такая же проблема, и я пробовал все, что было предложено в этом потоке, но ничто не могло сохранить мой пароль псевдонима. Дело в том, что я был абсолютно уверен в пароле, так как я обновил приложение уже четыре раза. Я получал сообщение «Keystore был изменен, или пароль был неверным» .
Решение
Похоже, что при создании хранилища ключей, использующего eclipse, перед паролем был добавлен символ пробела!
Эта неприятная ошибка, по-видимому, была исправлена в более поздней версии, и мне не удалось подписать мое приложение с паролем, который, как я думал, был правильным.
Основываясь на этой SO-ссылке: Ant не смог построить подписанный apk после обновления до android v20. Я предлагаю вам попробовать добавить пробельный символ до после вашего пароля .
Вы сохраняете такие значения, как key.store.password или key.alias.password в файле local.properties? Кто-то из них неверен?
Мне любопытно, есть ли какая-то ошибка, возникающая для ключей, созданных с помощью JDK6, и проверена в JDK7. Это объясняет, почему новые ключи, созданные для тестирования, работают, но старый не работает. Попробуйте понизиться до JDK6 и посмотрите, исправляет ли он это. У других проблемы с jarsigner в JDK7, которые ушли, когда они понижены до 6. Если это работает, напишите отчет об ошибке и попросите патч, чтобы вы могли безопасно перейти на Java 7 🙂
Я тоже недавно сражался с этой проблемой и пробовал все предложения, перечисленные здесь и в других местах. Наконец, была указана глупая ошибка, которая вызывала эту ошибку в моем конце – я хотел поделиться этим здесь, если это поможет любому из вас.
Скорее всего, это будет так, если у вас, как и я, есть несколько версий Java на вашем компьютере, и вы обновили JRE / JDK за время, когда вы первоначально создали хранилище ключей, и теперь, когда вы пытаетесь подписать APK.
По какой-то причине наши инструкции компиляции ссылались на полный путь Java следующим образом:
1 \ Java \ jdk1.6.0_45 \ bin \ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve
Одно из вышеизложенных предложений заставило меня подумать, что это может быть не проблема с паролем, и это может быть проблема несовместимости версий, вызывающая проблему. Поэтому я выполнил следующую команду:
Keytool -list -keystore cre80ve.keystore
Используя пароль, который, как я знал, был прав, и вот, он подтвердил, что это правильный пароль.
Затем я удалил явную ссылку в пути к (более старой) версии Java. Это автоматически запустило последнюю версию Java (jdk1.8.0_31 в моем случае):
Jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve
И все стало нормально работать!
Bottomline: это может быть не проблема с паролем, а разные версии Java или Android SDK, вызывающие проблему, поэтому не забудьте проверить это.
И как только он начнет работать, не забудьте сделать резервную копию хранилища ключей и пароля в безопасном месте 🙂
Мой ключевой псевдоним остановился, работая с трудом. (Хорошо, после нескольких обновлений Android Studio и Java).
Я пробовал все решения из этой темы, а также из других. В моем случае решение было неожиданным. У меня есть хранилище ключей с несколькими псевдонимами. Никто не работал, кроме одного, у которого был пароль такой же, как и хранилище ключей. Но, к сожалению, это был не тот, который мне нужен. Это заставило меня думать без всякой логики. Я скопировал одиночный псевдоним в новое хранилище ключей
И затем я сменил пароль псевдонима на то же, что и пароль хранилища ключей:
Наконец, я смог подписать свой апк. Это похоже на глупую ошибку, которая может растратить день разработки.
Источник
Vardhan Blog — My Experiences
This blog is to share the knowledge or tech tips in Java, Android, iOS and more. which I came across in my Career.
Pages
Thursday, May 17, 2012
Android : Solution «install parse failed no certificates»
- Password
- First and lastname
- Name of Organization unit
- Name of Organization
- City
- State
- Country
3.
jarsigner -verbose -keystore debug.keystore D:\Testc.apk sampleName
In some cases we need add -sigalg SHA1withRSA -digestalg SHA1 arguments to work out the step 3
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore debug.keystore D:\Testc.apk sampleName
Now it will ask for the password and then it will replace the apk with the signed one.
Thanks for reading 🙂
If you have any other quick thoughts/hints that you think people will find useful, feel free to leave a comment.
41 comments :
Thanks for the post
I got error in verifying the jar file..
Error : java.lang.securityexception: «invalid SHA1 signature file digest for res/layout/main.xml»
I was testing a sample third party app robotium.googlecode.com/files/AndroidCalculator.apk
Any help would be greatly appreciated..
Hi Srini,
I have checked out the project from the URL robotium.googlecode.com/files/AndroidCalculator.zip and http://robotium.googlecode.com/files/AndroidCalculator.apk
I haven’t faced any error. both are working fine.
what is the password we have to enter in the cmd prompt?
In step 2, whatever password is given by the user.
The same one should be used when password is asked
The same problem exists on JDK7, but the solution is different.
«It works with JDK 7 if I specify the parameters «-digestalg SHA1 -sigalg MD5withRSA» for jarsign, but not with the default algorithms, whatever they are.»
hi Vardhan
when i,am run this command (keytool -genkey -v -keystore debug.keystore -alias VritiEducation -keyalg RSA -keysize 2048 -validity 20000) terminal, then get this Exception
Please help me.
keytool -genkey -v -keystore debug.keystore -alias VritiEducation -keyalg RSA -keysize 2048 -validity 20000
Enter keystore password:
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:788)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
at java.security.KeyStore.load(KeyStore.java:1201)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:742)
at sun.security.tools.KeyTool.run(KeyTool.java:194)
at sun.security.tools.KeyTool.main(KeyTool.java:188)
Caused by: java.security.UnrecoverableKeyException: Password verification failed
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:786)
. 5 more
If you receive the following error: «keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect», it probably means that the value you specified for store_path already exists. Move or rename the file and rerun keytool.
Normally To generate a new keystore file we will be using that command.
thanks, it worked , saved me a lot of time 🙂
Hi there, I’ve done the abov and it verified the jar successfully with jarsigner -verify
jar verified.
But when trying adb install I still get the PARSE FAILED NO CERTIFICATES
Check this command:
«jarsigner -verify -verbose -certs your.apk»
If jar is verified then there is no problem of certificate
You can check the apk is certified or not in the console.
you can try this command:
«zipalign -v 4 your.apk new_your.apk»
Then the generated apk, you can install.
I re-followed your tutorial, seems somehow I missed out the zipalign bit initially :/. re-did it all but now on adb install -r myapk.apk, I am getting the following:
root@ben:/home/ben/Myapk1.02/dist# adb install -r myAPKc.apk
445 KB/s (4851069 bytes in 10.641s)
pkg: /data/local/tmp/myAPKc.apk
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
I then checked the jarsigner as per your reply and got at the end,
jar verified.
Then did zipalign and got:
Verification successful.
Re-tried adb install -r and got the same error as above.
Ah, fixed, deleted the app off the phone rather than trying a re-install, all working! 🙂
Cheers for the reply, and gret tutorial, very simple to follow. (when I read it correctly)
zipalign -v 4 D:\Test.apk D:\Testc.apk. hai sir please Explain about this ,,When i am trying to insatall GoogleLoginservice.apk i am getting
D:\Android\sdk of me\sdk\platform-tools>adb install GoogleServicesFramework.apk
81 KB/s (2221760 bytes in 26.627s)
pkg: /data/local/tmp/GoogleServicesFramework.apk
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
zipalign is an archive alignment tool that provides important optimization to Android application (.apk) files.
-v : verbose output
4 : to be aligned on 4-byte boundaries
if the parser did not find any certificates in the .apk then we will be getting the following error INSTALL_PARSE_FAILED_NO_CERTIFICATES
I’ve done as you told, but get this when verifying :
C:\»Program Files (x86)»\Java\jdk1.6.0_29\bin\jarsigner -verify C:\fred\GoogleServicesFramework_.apk
jarsigner: java.lang.SecurityException: invalid SHA1 signature file digest for res/drawable-xhdpi/notification_system_update_download_failure.png
Where did I went wrong ?
If your png is unsigned then you will get following exception.
Try this «zipalign -f -v -c 4 GoogleServicesFramework_.apk GoogleServicesFramework_new.apk «
If above command wont work then try the below options
There are some security exception with higher version of java.
Try to add this parameters «-digestalg SHA1 -sigalg MD5withRSA» for jarsign and check.
You can install lower version like JDK 1.6.26
When i run jarsigner i get jar verified, but i also get extra warning messages. Is that ok ?
C:\Users\KarthikV\.android>jarsigner -verify D:\IRCTCMobile.apk
jar verified.
Warning:
This jar contains entries whose certificate chain is not validated.
Re-run with the -verbose and -certs options for more details.
No, if your certificate chain is not yet validate then there will be problem in uploading file to market.
Re-run with «jarsigner -verify -verbose -certs your.apk»
You can identify where the problem is.
Now getting different error. Thanks for reply.
Step i followed :
Command1 : keytool -genkeypair -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android -dname «CN=Android Debug,O=Android,C=US» -validity 9999
Command 2 : keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android Successfully
Command 3 : jarsigner.exe -verbose -keystore debug.keystore FastNotepad.apk androiddebugkey
Executed the above 3 commands successfully after removing the signature folder(ieMETA-INF) folder in the FastNotepad.apk file.
After that executed «adb install FastNotepad.apk» command, for which i got error message Failure [Install_Parse_Failed_No_Certificates].
Tried with both JDK 1.7 and 1.6. Tried with 3 different Windows 7, Windows XP machines. Same error msg. Unable to proceed further. Plz help.
Thanks in advance.
Also after Command 3 execution deleted META-INF folder gets created in FastNotepad.apk. If there is any possibility to chat with u directly plz let me know. Thanks. My Id is kvteen (at) gmail dot com.
You can upload your apk and send me a link, I will support you in finding the solution.
Hi Harsha, Thanks for replying.
Please find the apk file in the below link. Size 4MB.
Please let me know in case of any other queries. Thanks.
From your manifest file, I have understood little information.
META-INF Structure in Android is as follows
META-INF/MANIFEST.MF, META-INF/CERT.SF and META-INF/CERT.RSA
But I found this files ANDROIDD.DSA, ANDROIDD.SF and MANIFEST.MF
Your manifest file says
Created-By: 1.7.0_25 (Oracle Corporation) instead of Created-By: 1.0 (Android)
MANIFEST.MF contains the list of files present in the APK and digest. The default digest used is SHA-1
Android uses SHA1-Digest but it is SHA-256-Digest.
My guess the android project is not created by android guidelines.
CERT.RSA The .SF file is signed and the signature is placed in the .RSA file. Signature block files produced using the RSA algorithm are saved with the extension .RSA, those generated with DSA or EC keys with the .DSA or .EC extensions, respectively. Multiple signatures can be performed, resulting in multiple .SF and .RSA/DSA/EC files in the JAR file’s META-INF/ directory.
I Prefer RSA, since supposed to encrypt the file with public key rather than doing with private key (DSA).
By the above information. I can say your apk is verified with jarsigner but not with android, since android can’t understand your apk structure, so it says install parse failed no certificates even though all your objects in apk is certified by jarsigner
Источник