Двойная подпись .apk // SHA1 и другие проблемы

В настоящее время я сталкиваюсь с некоторыми проблемами с двойной подписью .apk. Нормальный рабочий процесс всегда был таким:

zip -d FILE.apk META-INF/\*
jarsigner -verbose -keystore EXTERNAL.keystore FILE.apk EXTERNAL
jarsigner -verbose -keystore INTERNAL FILE.apk INTERNAL
zipalign -v 4 FILE.apk FILE_ALIGNED.apk

При использовании этого оригинального метода я получаю сообщение об ошибке из магазина Google Play:

Вы загрузили APK с недействительной подписью (подробнее о подписи). Ошибка от apksigner: ERROR (Jar signer INTERNAL.RSA): подпись JAR META-INF/INTERNAL.RSA использует алгоритм дайджеста 2.16.840.1.101.3.4.2.1 и алгоритм подписи 1.2.840.113549.1.1.1, который не поддерживается в API Уровни [[14, 17]]

Поскольку я получаю эту ошибку алгоритма только для "INTERNAL.RSA", я пытался использовать:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore INTERNAL FILE.apk INTERNAL

Это приводит к другой ошибке:

Вы загрузили APK с недействительной подписью (подробнее о подписи). Ошибка от apksigner: ERROR (Jar signer EXTERNAL.DSA): нет дайджеста для assets/www/assets/fonts/FONT.ttf в META-INF/EXTERNAL.SF

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

Привет, Мариус


person Marius Dahlem    schedule 19.07.2017    source источник
comment
Что касается второй ошибки: (1) Вы добавили параметры -sigalg и -digestalg в свои исходные четыре строки сценария и повторили попытку, или вы запустили модифицированную команду jarsigner после двух предыдущих в том же файле? (2) Есть ли какие-либо другие ошибки или предупреждения от Play, кроме «Нет дайджеста для...» в META-INF/EXTERNAL.SF?   -  person Alex Klyubin    schedule 19.07.2017
comment
Я повторил попытку подписать с помощью -sigalg и -digestalg новый файл. Я всегда использую копию оригинального файла, чтобы подписать его, и если это не работает, я удаляю его. К сожалению, других ошибок не показано, кроме «Нет дайджеста для... актива XY».   -  person Marius Dahlem    schedule 26.07.2017
comment
Пожалуйста, добавьте содержимое раздела assets/www/assets/fonts/FONT.ttf файла META-INF/EXTERNAL.SF из APK, на который жалуется Play (или apksigner verify).   -  person Alex Klyubin    schedule 26.07.2017


Ответы (1)


Вы можете попробовать переключиться с jarsigner на apksigner (https://developer.android.com/studio/command-line/apksigner.html). Исходные четыре команды переключаются на:

zipalign -v -p 4 FILE.apk FILE_ALIGNED.apk
apksigner sign --ks EXTERNAL.keystore --next-signer --ks INTERNAL FILE_ALIGNED.apk

Первая ошибка в OP связана с тем, что RSA с подписями SHA-256 APK (по умолчанию в современных jarsigner) не поддерживается на платформах старше уровня API 18 (Jelly Bean MR2), а AndroidManifest.xml APK объявляет (через android:minSdkVersion), что APK поддерживает работу на платформах с уровнем API 14 и выше.

P. S. Вы можете приблизить поведение проверки подписи APK Play, запустив

apksigner verify some.apk
person Alex Klyubin    schedule 19.07.2017
comment
Я попытаюсь использовать apksigner и прокомментирую позже сегодня, как только у меня будет результат. Спасибо за вашу помощь! - person Marius Dahlem; 26.07.2017