12

将密钥库的类型从 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 提出建议,以便我可以更新我的应用程序。

4

3 回答 3

2

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

修复步骤:

  1. 将apk的扩展名更改为zip
  2. 不要解压缩apk,而是通过双击用zip打开它
  3. 删除 META-INF 文件夹
  4. 将扩展名从 zip 更改为 apk
  5. 使用以下命令从 cmd 提示符签署您的 apk

jarsigner -keystore -storepass

  1. 压缩 algin 的 apk

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

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

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

于 2015-10-31T20:20:01.837 回答
0

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

于 2019-03-05T16:36:43.577 回答
0

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

将 AIR Android p12 密钥库文件迁移到 Cordova

于 2021-03-01T15:20:44.283 回答