Почему отпечаток пальца в моем недавно подписанном apk отличается?

У меня возникла проблема с получением того же отпечатка пальца после того, как я изменил тип хранилища ключей с PKCS12 на JKS.

Чтобы внести изменения, я создал новое хранилище ключей JKS, удалил ключ, который был в нем, и импортировал нужный мне ключ из файла .p12. При проверке ключа с помощью keytool -keystore keystore.jks -list он выводит отпечаток пальца:

(SHA1): 21: ... :39

который является отпечатком файла .p12, и отпечаток пальца, который Google говорит, что мои предыдущие apks были. Когда я подписываю свой apk этим сертификатом и пытаюсь загрузить его в магазин игр, он говорит, что у сертификата есть отпечаток пальца:

SHA1: C7: ... :AF

Когда я просматриваю как исходный файл .p12, так и новый файл .jks с помощью KeyStore Explorer, они оба указывают SHA1: C7: ... :AF как отпечаток пальца.

Редактировать1:

keytool -keystore disneyquiz.p12 -storetype PKCS12 -alias 1 -list
Enter keystore password:
1, Jun 4, 2014, PrivateKeyEntry,
Certificate fingerprint (SHA1): 21: ... :39


keytool -keystore quizstore.jks -list
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

key0, Dec 3, 2014, PrivateKeyEntry,
Certificate fingerprint (SHA1): 21: ... :39

Новый APK

keytool -printcert -file CERT.RSA    
Owner: CN=CBP Development, OU=CBP Development, O=CBP Development, C=US
Issuer: CN=CBP Development, OU=CBP Development, O=CBP Development, C=US
Serial number: 36663939343135303a31343636393337363665663a2d38303030
Valid from: Tue Jun 03 19:29:37 EDT 2014 until: Sat Jun 04 19:29:37 EDT 2039
Certificate fingerprints:
         MD5:  F6: ... :72
         SHA1: C7: ... :AF
         SHA256:     7C:D6: ... :67:B9
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
  codeSigning
]

Оригинальный APK

keytool -printcert -file CERT.RSA    
Owner: CN=CBP Development, OU=CBP Development, O=CBP Development, C=US
Issuer: CN=CBP Development, OU=CBP Development, O=CBP Development, C=US
Serial number: 36663939343135303a31343636393337363665663a2d38303030
Valid from: Tue Jun 03 19:29:37 EDT 2014 until: Sat Jun 04 19:29:37 EDT 2039
Certificate fingerprints:
         MD5:  AD: ... :CA
         SHA1: 21: ... :39
         SHA256: D2:7D: ... :8E:47
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
  codeSigning
]

Редактировать 2:

Исходный файл .p12 был создан с помощью генератора сертификатов Adobe Air, а исходный apk был скомпилирован с помощью Adobe Flash Professional CC. После тестирования сертификатов и попыток подписать APK различными способами, я думаю, что единственная возможность заключается в том, что процесс подписания Flash Professional каким-то образом меняет сообщаемый отпечаток пальца, когда он подписывает apk. CERT.RSA в файле META-INF apk, созданном во флэш-памяти, соответствует CERT.RSA нового apk. Надеюсь, у кого-то есть предложение о том, как подписать мой новый apk, чтобы я мог обновить свое приложение.


person Jimbo145    schedule 04.12.2014    source источник
comment
Вы уверены, что выбираете правильный сертификат? Каков список ваших сертификатов?   -  person Braiam    schedule 04.12.2014
comment
В хранилище ключей есть только один сертификат, и p12 — это только один сертификат. Я не понимаю, почему отпечатки пальцев отображаются по-разному при проверке разными способами.   -  person Jimbo145    schedule 04.12.2014


Ответы (3)


проблема связана с gradle при подписании с использованием ключа, импортированного из ключа p12.

шаги по исправлению:

  1. изменить расширение apk на zip
  2. не разархивируйте apk, а откройте его с помощью zip, дважды щелкнув
  3. удалить папку META-INF
  4. сменить расширение с zip на apk
  5. подпишите свой apk из командной строки cmd, используя команду ниже

jarsigner-keystore-storepass

  1. заархивировать apk

zipalign [-f] [-v] infile.apk outfile.apk

выравнивание представляет собой целое число, определяющее границы выравнивания байтов. Это всегда должно быть 4 (что обеспечивает 32-битное выравнивание), иначе оно фактически ничего не делает.

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

person Dev    schedule 31.10.2015
comment
Работал на меня. Спасибо. - person ilyabreev; 17.11.2015
comment
Однако это все еще не отвечает на вопрос. - person ilyabreev; 17.11.2015

Это случилось и со мной, оказалось, что мой ключ был преобразован из файла .p12 и генерировал подпись, отличную от предыдущей. Запуск этого инструмента на созданном и подписанном APK для Android решил проблему для меня, поскольку он выполняет шаги, описанные Dev для вас https://github.com/SierraII/morphthis

person tansz    schedule 05.03.2019

На случай, если кто-то снова столкнется с этой проблемой: вам ДОЛЖЕН использоваться jarsigner из JDK 7, чтобы это работало (и вы должны использовать jarsigner с вашим сертификатом p12 вместо преобразованного сертификата). Для получения дополнительной информации см. эту тему:

Перенос файла хранилища ключей AIR Android p12 в Cordova

person Uffe Flarup    schedule 01.03.2021