为啥我新签名的 apk 中的指纹不同?

Posted

技术标签:

【中文标题】为啥我新签名的 apk 中的指纹不同?【英文标题】:Why is fingerprint different in my newly signed apk?为什么我新签名的 apk 中的指纹不同? 【发布时间】:2015-02-01 18:38:18 【问题描述】:

将密钥库的类型从 PKCS12 更改为 JKS 后,我在获取相同的指纹时遇到问题。

为了进行更改,我创建了一个新的 JKS 密钥库,删除了其中的密钥,并从 .p12 文件中导入了我需要的密钥。使用keytool -keystore keystore.jks -list 验证密钥时 它输出指纹:

(SHA1): 21: ... :39

这是.p12文件的指纹,指纹谷歌说我以前的apk是。当我使用此证书签署我的 apk 并尝试将其上传到 playstore 时,它​​说证书具有指纹:

SHA1: C7: ... :AF

当我使用 KeyStore Explorer 检查原始 .p12 文件和新 .jks 文件时,它们都将 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 文件是使用 Adob​​e Air Certificate generator 生成的,原始 apk 是使用 Adob​​e Flash Professional CC 编译的。在测试证书并尝试以各种方式签署 APK 之后,我认为唯一的可能性是 Flash Professional 签名过程在签署 apk 时会以某种方式更改报告的指纹。 flash 中创建的 apk 的 META-INF 中的 CERT.RSA 与新 apk 的 CERT.RSA 匹配。希望有人对如何签署我的新 apk 提出建议,以便我可以更新我的应用程序。

【问题讨论】:

您确定选择了正确的证书吗?你的证书清单是什么? keystore中只有一个证书,p12只有一个证书。我不明白为什么指纹在以不同方式检查时显示不同。 【参考方案1】:

问题在于 gradle,同时使用从 p12 密钥导入的密钥进行签名。

修复步骤:

    将 apk 的扩展名更改为 zip 不要解压apk,而是用zip双击打开 删除 META-INF 文件夹 将扩展名从 zip 更改为 apk 使用以下命令在 cmd 提示符下为您的 apk 签名

jarsigner -keystore -storepass

    压缩 algin apk

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

对齐是定义字节对齐边界的整数。这必须始终为 4(提供 32 位对齐),否则它实际上什么都不做。

我能够使用这些步骤成功地重新发布我的一个

【讨论】:

为我工作。谢谢。 但是它仍然没有回答问题。【参考方案2】:

这也发生在我身上,原来我的密钥是从 .p12 文件转换而来的,并且生成的签名与以前不同。在 android 构建和签名的 APK 上运行此工具为我解决了这个问题,因为它执行了 Dev 为您概述的步骤https://github.com/SierraII/morphthis

【讨论】:

【参考方案3】:

如果有人再次遇到此问题:您必须使用 JDK 7 中的 jarsigner 才能使其正常工作(并且您必须将 jarsigner 与您的 p12 证书一起使用,而不是转换后的证书)。有关更多信息,请参阅此线程:

Migrate AIR Android p12 keystore file to Cordova

【讨论】:

以上是关于为啥我新签名的 apk 中的指纹不同?的主要内容,如果未能解决你的问题,请参考以下文章

android获取APK签名信息及MD5指纹

Android Studio 之签名

android 生成签名证书

Android基础『V1V2V3签名』

Google Play 上新版本应用的上传失败并出现签名错误

Google Play 签名 SHA256 指纹发布一次后会改变吗?