为啥我新签名的 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 文件是使用 Adobe Air Certificate generator 生成的,原始 apk 是使用 Adobe 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 中的指纹不同?的主要内容,如果未能解决你的问题,请参考以下文章