为什么指纹在我新签名的apk中有所不同?

问题描述 投票:10回答:3

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

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

(SHA1): 21: ... :39

这是.p12文件的指纹,指纹谷歌说我以前的apks已经。当我用这个证书签署我的apk并尝试将其上传到Playstore时,它说证书有指纹:

SHA1: C7: ... :AF

当我用KeyStore Explorer检查原始的.p12文件和新的.jks文件时,他们都将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

新的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生成器生成的,原始apk是使用Adobe Flash Professional CC编译的。在测试证书并尝试以各种方式签署APK后,我认为唯一的可能性是Flash Professional签名过程以某种方式在签署apk时更改报告的指纹。闪存中的CERT.RSA创建了apk的META-INF与新apk的CERT.RSA相匹配。希望有人建议如何签署我的新apk,以便我可以更新我的应用程序。

android android-studio keytool jks flash-cc
3个回答
2
投票

问题是使用gradle,使用从p12键导入的密钥进行签名。

修复步骤:

  1. 将apk的扩展名更改为zip
  2. 不解压缩apk,但双击打开拉链
  3. 删除META-INF文件夹
  4. 将扩展名从zip更改为apk
  5. 使用以下命令从cmd提示符号登录你的apk

jarsigner -keystore -storepass

  1. zip algin the apk

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

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

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


1
投票

我有同样的问题。你找到了解决方案吗?

使用此命令行,我的指纹与apk相同。也许,它可以帮助你:

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

0
投票

这也发生在我身上,事实证明我的密钥已经从.p12文件转换而来,并且生成了与以前不同的签名。在Android上构建并签名的APK上运行此工具为我解决了问题,因为它为您开发了针对您的步骤https://github.com/SierraII/morphthis

© www.soinside.com 2019 - 2024. All rights reserved.