我们正在计划对CI设置进行一些更改,这些更改将涉及对密钥库进行一些更改,这些更改用于签署Android应用程序(更改密码,关键别名等)。
显然,任何可能导致我们使用错误密钥签名的错误,如果被推入商店,将会是一场灾难。
所以我的问题是:
答案 0 :(得分:1)
我将按相反的顺序执行此操作:
- Google Play开发者控制台是否有适当的安全措施来检测现有应用的密钥更改?
醇>
是的。事实上,一旦您上传了已签名的* APK,您就只能提交使用该证书签名的更新的APK。如果不这样做会使Google Play吐出类似的内容:
上传失败
您上传了使用其他证书签名的APK到之前的APK。您必须使用相同的证书。
您现有的APK使用带有指纹的证书进行签名: [SHA1:89:2F:11:FE:CE:D6:CC:DF:65:E7:76:3E:DD:A7:96:4F:84:DD:BA:33] 用于签署您上传的APK的证书有指纹: [SHA1:20:26:F4:C1:DF:0F:2B:D9:46:03:FF:AB:07:B1:28:7B:9C:75:44:CC]
来源:The apk must be signed with the same certificates as the previous version
- 是否可以验证两个应用是否已使用相同的密钥签名?
醇>
是。您可以使用jarsigner
或keytool
。我更喜欢后者的输出:
keytool -list -printcert -jarfile MyApp.apk
在其他一些细节中,您将获得证书的指纹(默认为MD5,SHA1和SHA256),看起来有点像这样:
Certificate fingerprints:
MD5: 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF
SHA1: 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:44
SHA256: 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:12:34:56:78:90:AB:CD:EF:12:34:56:78
Signature algorithm name: SHA1withRSA
Version: 3
您可以为多个APK执行此操作并比较结果。或者,您也可以直接将APK中的指纹与密钥库中的证书进行比较:
keytool -list -keystore MyApp.keystore
输入密钥库的密码后,您会看到以下内容:
Certificate fingerprint (SHA1): 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:44
这应该与APK的SHA1指纹完全匹配。
有关如何使用jarsigner
执行类似操作的示例,请参阅上面链接的Q& A的one of the answers。
- 验证用于签署Android应用程序的关键用途的最佳方法是什么?
醇>
不确定这是否可以客观地回答,但上述任何一种方法都可以解决问题。理想情况下,您是否希望设置脚本以自动执行此检查(作为构建过程的一部分?),并在发生意外情况时尽早失败。在最糟糕的情况下,您最终会得到一张使用证书签名的APK,而您并不打算使用该证书进行签名。如果此APK是对现有应用的更新,则Google Play会阻止您提交该应用。如果它是一个全新的应用程序,则不会,并且必须使用相同(错误)的证书对其进行任何更新。