繁体   English   中英

验证Android代码签名

[英]Verifying Android Code Signing

我们正在计划对CI设置进行一些更改,其中包括对用于签名Android应用程序的密钥库进行一些更改(更改密码,密钥别名之类的东西)。

显然,任何可能导致我们用错误的密钥签名的错误,如果将其推入商店,都将是一场灾难。

所以我的问题是:

  1. 验证用于签名Android应用程序的密钥的最佳方法是什么?
  2. 是否可以验证两个应用程序已使用同一密钥签名?
  3. Google Play开发者控制台是否已采取适当措施来检测现有应用程序的密钥更改?

我将以相反的顺序执行此操作:

  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]

  • =“已签名”表示已使用非调试证书进行了签名。

来源: apk必须使用与先前版本相同的证书签名

  1. 是否可以验证两个应用程序已使用同一密钥签名?

是。 您可以为此使用jarsignerkeytool 我更喜欢后者的输出:

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进行类似操作的示例。

  1. 验证用于签名Android应用程序的密钥的最佳方法是什么?

不确定是否可以客观地回答这个问题,但是上述两种方法都可以解决问题。 理想情况下,您需要设置一个脚本来自动执行此检查(作为构建过程的一部分?),并在出现意外情况时尽早失败。 最糟糕的情况是,您最终会得到一个APK,该APK上签名的证书并不是您要签署的。 如果此APK是对现有应用的更新,则Google Play会阻止您提交它。 如果它是全新的应用程序,则不会,并且必须使用相同(错误的)证书对它进行任何更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM