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

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

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

(SHA1): 21: ... :39

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

SHA1: C7: ... :AF

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

Edit1:

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

Новый Апк

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 во флеш-файле apk META-INF соответствует CERT.RSA нового apk. Надеюсь, у кого-то есть предложение относительно того, как подписать мой новый apk, чтобы я мог обновить свое приложение.

4 ответа

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

шаги для исправления:

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

jarsigner -keystore -storepass

  1. zip algin apk

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

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

Мне удалось переиздать один из моих успешно с помощью этих шагов

У меня такая же проблема. Вы нашли решение?

С этой командной строкой у меня такой же отпечаток, как у apk. Возможно, это может помочь вам:

openssl pkcs12 -in certificat.p12 -nodes -passin pass:PASSWORD | openssl x509 -fingerprint

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

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

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

Другие вопросы по тегам