如何使用上传证书发布应用更新?

时间:2018-11-15 13:48:14

标签: android android-studio google-play-console

上周,我创建了一个应用程序,并通过在Android Studio中创建密钥库上载了该应用程序的第一个版本以播放商店。我想注册App Signing,但是Play Console说我首先需要上传应用程序,然后才能注册,所以我先上传了应用捆绑包(app.aab),然后注册了该程序,现在我可以看到2个证书-上传证书和应用签名证书。可以选择以.der格式下载它们。

这些.der文件怎么办?要发布更新,我再次转到Generate Signed Build,它询问我选择并输入密码的密钥库,并生成了更新的签名应用程序包。

在整个过程中,我从未遇到过使用.der证书的选项,如果不需要的话,为什么它们会显示在Play控制台的“发行管理”下的“应用签名”中。而且由于Android Studio仍基于硬盘上可用的密钥库生成签名版本,所以我注册的应用程序签名有什么意义?

App SigningManaging Keys上的官方文档甚至都没有提到这些上传证书。它提到的只是使用上传密钥对您的应用进行签名,什么是上传密钥-Play控制台未提及它,Android Studio和Android Studio也都没有要求密钥库生成.jks格式的签名版本

1 个答案:

答案 0 :(得分:5)

更新:Google已更新了documentation around App Signing by Play,使其更易于理解,因此该答案可能是多余的。留给后代。

tldr;大多数开发人员不需要这些.der文件,它们是用于高级用例的。

这么多问题!好,系好安全带...

只是为了澄清基础知识以确保我们使用相同的语言:当您在 keystore 中创建密钥时,实际上是在创建密钥对私有密钥公共密钥)以及证书。证书包含我们称为专有名称(带有您的姓名,公司名称等)和公用密钥的名称。因此,该证书是所有公共信息,实际上是在您对其进行签名以供任何人查看时添加到您的APK中的。私钥保留在您的密钥库中,并且是秘密,这使得其他任何人都无法以可以通过证书验证的方式对您的APK进行签名。因为有太多的术语并且人们通常对底层的密码学概念不太熟悉,所以您经常会看到人们只是互换使用术语“密钥库”,“密钥”和“证书”。

注册应用签名时,会将私钥发送给Google,以便Google可以代表您对APK进行签名。目的是三重的:

  • 好处1-应用优化:当您上传Android App Bundle时,Google可以为您生成的APK签名。主要好处是可以为您的应用节省尺寸,但超出了本文的范围。
  • 好处#2-密钥丢失事件:无论您上传的是APK还是Android应用程序捆绑包,如果丢失了密钥,Google仍然有副本,因此您仍然可以更新通过上传用新密钥签名的APK(此操作称为上传密钥重置)来创建您的应用,Google仍然可以使用原始应用签名密钥对您的APK进行签名。没有这个,如果您丢失了密钥,您将无法再对您的应用程序进行任何更新。
  • 好处3-密钥泄露事件:如果您使用与应用签名密钥不同的密钥(即上传密钥)对上传到Play控制台的APK进行签名,那么可能会损害您的应用程序签名密钥(您可以将其放在具有受限ACL的驱动器上,因为您将不再使用它,而不是与公司的许多开发人员共享它)。如果您的上传密钥被盗,Google可以对其进行更改。如果您的应用签名密钥被盗用(例如,泄露),那么您或Google便无能为力,并且其他人可以对假冒您的APK进行签名并在某些应用商店或网站中分发。

您可以看到现在有两种密钥(和关联的证书):

  • 应用程序签名密钥:这是用于对交付给用户的APK进行签名的密钥。
  • 上传密钥:这是Google Play用来识别您上传到Play控制台的APK的来源和完整性的密钥。

哦,是的,我还应该提到:有两种注册App Signing的方法。

  1. 您是新应用,并且在您首次上传应用时,系统会提示您是否要加入“应用签名”。如果您在此阶段注册,则 Google会为您生成应用程序签名密钥,并将您用来签署上传的工件的密钥视为上传密钥
  2. 您是现有的应用(即您已经上传了APK而未注册),在这种情况下,您必须使用名为PEPK的工具来转移应用签名密钥并创建一个新的此时上传密钥。

对于现有应用,在注册应用签名时,创建上传密钥是可选的。这是针对只对利用 Benefit#1 优势感兴趣的人的。 Google强烈建议您创建一个上传密钥,并开始上传与其签名的APK / Bundle,以避免#2和#3 中描述的灾难性情况(密钥丢失/损坏)。

正如您正确注意到的那样,即使您创建了上传密钥,您仍然可以上传使用您的应用签名密钥签名的APK 。尽管这似乎适得其反,但Google这么做的主要原因是为开发人员提供了一种切换到Android App Bundle(需要注册App Signing)的方法,并在测试过程中对其进行了测试仍然能够将APK推入使用其应用签名键签名的生产轨道。这为开发人员提供了时间来测试和确定如何在构建过程中完成这项工作,而又不会阻止当前的产品发布过程。

请注意,因为您可以仍然上传使用应用签名键签名的APK,并不意味着您应该 。如果您想利用 Benefit#3 的优势,则需要开始上传使用上传密钥签名的APK。

-

现在,回到这些.der文件...好吧,很快!

当您的Android应用与第三方API(例如Google API,Facebook API等)进行通信时,通常必须注册您的应用。此注册通常需要两条信息:程序包名称证书的指纹(例如SHA1)。此注册可确保只有使用您的包名用您的应用签名密钥签名的应用才能使用该API的配额。

所有开发人员都知道他们的软件包名称,但是很多人经常问如何获取证书的指纹。 Stackoverflow是找到正确的命令以运行以从密钥库中提取它的好地方,但是 Play控制台也将其显示为方便(对于要求Google生成应用程序签名的开发人员来说,这也至关重要为他们设置密钥,因为他们没有带有应用签名密钥的密钥库)。这就是为什么您看到应用程序签名证书的MD5,SHA1和SHA256的原因。

我看到您现在在问:“好,显示应用程序签名证书的指纹很有意义,但是为什么还要显示上传证书的指纹呢?”这是一个很好的问题,谢谢您的提问。如果您在使用APK上载密钥对APK进行签名之前将其上传到Play控制台,则可能需要先测试这些工件,因此,如果您与任何第三方API集成在一起,则也需要注册此证书!

好的,现在,我们终于可以找到.der文件了。

.der文件是证书。使用Play Console,您不仅可以查看证书的指纹,还可以完整下载它们。开发人员可能需要它们的唯一原因是当第三方API需要使用其他种类的指纹来注册您的应用程序时。例如,Facebook API需要向证书的SHA1的二进制表示形式的Base64注册。您无法通过Play控制台显示的指纹进行计算,因此必须在原始证书上手动运行一些命令。

[来源:我在Google工作,并实施了其中的大部分内容]