使用 Google Play 应用签名

借助 Google Play 应用签名,Google 会管理和保护您应用的签名密钥,并使用该密钥为您的 APK 签名以进行分发。这种应用签名密钥的存储方式很安全,可在您的密钥丢失或被盗时确保您的内容安全无虞。

重要提示:要使用推荐的应用发布格式 Android App Bundle,您需要先注册 Google Play 应用签名,然后才能在 Play 管理中心上传您的 app bundle 文件。

要选择加入这项计划,您需要成为帐号所有者或具有全局“管理产品版本”权限的用户,而且您需要接受服务条款。您可以为应用注册 Google Play 应用签名,但一次只能注册一个应用。

工作原理

您使用 Google Play 应用签名功能后,系统会将您的密钥存储在基础架构中;这套基础架构与 Google 用来存储自身密钥的基础架构完全相同。密钥会受 Google 密钥管理服务的保护。如果您想了解 Google 的技术基础架构,请参阅 Google Cloud 安全白皮书

Android 应用会使用私钥进行签名。为了确保应用更新是可信的,每个私钥都有关联的公钥证书,设备和服务可以使用该公钥证书来验证应用是否来自可信来源。只有当更新的签名与所安装应用的签名匹配时,设备才会接受更新。让 Google 来管理您的应用签名密钥使验证过程更有安全保障。

注意:您可以自由选择是否要使用 Google Play 应用签名功能。您仍然可以上传 APK 并管理自己的密钥(而不使用 app bundle)。不过,在这种情况下,如果您不幸丢失密钥库或密钥库被盗,将无法更新自己的应用,而必须改用新的软件包名称来发布新应用。

密钥、工件和工具的说明
术语 说明
应用签名密钥

Google Play 会使用这个密钥对提供给用户设备的 APK 进行签名。如果您选择加入 Google Play 应用签名计划,则可以上传现有的应用签名密钥,也可以让 Google 为您生成一个应用签名密钥。

应用签名密钥在应用的整个生命周期内保持不变。请勿将您的应用签名密钥告知他人,不过您可以与其他人分享应用的公钥证书。

上传密钥

在将 app bundle 或 APK 上传到 Google Play 之前,您可以使用该密钥对其进行签名。请勿将您的上传密钥告知他人,不过您可以与其他人分享应用的公钥证书。出于安全考虑,建议您确保应用签名密钥和上传密钥为不同的密钥。

生成上传密钥的方式有以下两种:

  • 使用您的应用签名密钥:如果您让 Google 在您选择加入应用签名计划时为您生成应用签名密钥,则您用于第一个版本的密钥也是您的上传密钥。
  • 使用单独的上传密钥:如果您在选择加入应用签名计划时提供自己的应用签名密钥,那么您可以选择生成新的上传密钥以提高安全性。如果您没有生成新的上传密钥,请将您的应用签名密钥用作上传密钥来为版本签名。
证书(.der.pem

证书包含一个公钥以及关于密钥所有者的额外识别信息。借助公钥证书,所有人都可以验证 app bundle 或 APK 的签名者,而且您可以与任何人分享该证书,因为其中并不包含您的私钥。

要向 API 提供商注册您的密钥,您可以从 Play 管理中心的应用签名页面下载您的应用签名密钥和上传密钥的公钥证书。您可以与任何人分享公钥证书。公钥证书不包含您的私钥。

证书指纹

证书的唯一简短表示形式,通常 API 提供商会同时请求证书指纹和软件包名称以注册使用其服务的应用。

您可以在 Play 管理中心的应用签名页面上找到上传证书和应用签名证书的 MD5、SHA-1 和 SHA-256 指纹。您还可以从同一页面下载原始证书 (.der) 来计算其他指纹。

Java 密钥库(.jks.keystore 安全证书和私钥的存储区。
Play 加密私钥 (PEPK) 工具

您可以使用这项工具从 Java 密钥库中导出私钥,然后对这些私钥进行加密,再转移至 Google Play。

将应用密钥提供给 Google 使用时,请选择导出及上传密钥的选项(如有需要,另请选择公钥证书选项),并按照说明下载和使用此工具。如果您愿意,也可以下载、查看和使用 PEPK 工具的开放源代码。

应用签名流程

在选择加入 Google Play 应用签名计划前后,您可以上传使用原始应用签名密钥进行签名的 APK。

如果您即将开始使用 Android App Bundle,则可以在正式版发布阶段使用现有的 APK,同时在测试轨道中对其进行测试。具体流程如下:

  1. 为您的 app bundle 或 APK 签名,并将其上传到您的 Play 管理中心。
  2. 签名流程会因您上传的内容而异,如下所示:
    • App bundle:Google 会通过您的 app bundle 生成经过优化的 APK,然后使用应用签名密钥为 APK 签名。
    • 使用上传密钥签名的 APK:Google 会验证 APK 中的签名并将签名删除,然后使用应用签名密钥重新为该 APK 签名。
    • 使用应用签名密钥签名的 APK:Google 会验证签名。
  3. Google 向用户提供已签名的 APK。

选择加入 Google Play 应用签名计划

新应用

第 1 步:创建上传密钥

  1. 按照说明创建上传密钥。
  2. 使用上传密钥为新 APK 签名。

第 2 步:准备应用版本

  1. 按照说明准备和发布版本
  2. 选择发布轨道后,请在“让 Google 管理并保护您的应用签名密钥”部分下配置应用签名。
  3. 如果选择继续,系统生成的密钥就会成为您为未来的版本进行签名时使用的上传密钥,或者您也可以选择高级选项,其中包括:
    • 使用与开发者帐号中的另一个应用相同的密钥(选项 2)。
    • 上传现有的应用签名密钥(选项 2、选项 3 和选项 4):选择最适合您的导出和上传选项。上传应用签名密钥及其公钥证书后,您可以创建上传密钥,也可以继续将应用签名密钥用作上传密钥。

注意:您需要接受《服务条款》并选择加入应用签名计划,才能继续操作。

第 3 步:向 API 提供商注册应用签名密钥

如果您的应用使用任何 API,您通常需要注册 Google 用于为应用签名的密钥所对应的证书,以便进行身份验证。寻找证书的方法如下:

  1. 登录您的 Play 管理中心
  2. 选择相应的应用。
  3. 在左侧菜单中,依次选择版本管理 > 应用签名
  4. 复制应用签名证书的指纹(MD5、SHA-1 和 SHA-256)。
    • 如果 API 提供商需要其他类型的指纹,您也可以下载 .der 格式的原始证书,并通过 API 提供商要求的转换工具转换该证书。
现有应用

第 1 步:加入 Google Play 应用签名计划

  1. 登录您的 Play 管理中心
  2. 选择相应的应用。
  3. 在左侧菜单中,依次选择版本管理 > 应用签名
  4. 如果您尚未接受《服务条款》,请查看条款内容并选择接受

第 2 步:将原始密钥发送给 Google 并创建上传密钥

  1. 找到您的原始应用签名密钥。
  2. 登录您的 Play 管理中心
  3. 选择相应的应用。
  4. 在左侧菜单中,依次选择版本管理 > 应用签名
  5. 选择最适合您的发布流程的导出和上传选项,并上传现有的应用签名密钥。

第 3 步:创建上传密钥(可选但建议执行)

  1. 创建上传密钥并将证书上传到 Google Play。
    • 您也可以继续将应用签名密钥用作上传密钥。
  2. 复制应用签名证书的指纹(MD5、SHA-1 和 SHA-256)。
    • 出于测试目的,您可能需要使用证书指纹和应用签名密钥向 API 提供商注册上传密钥的证书。

第 4 步:使用上传密钥为您的下一次应用更新签名

发布应用更新时,您需要使用上传密钥为更新签名。

  • 如果您之前没有生成新的上传密钥:请继续使用原始应用签名密钥为版本签名,然后再将其上传到 Google Play。如果您丢失了应用签名密钥,则可以生成新的上传密钥,并向 Google 注册该密钥,以便继续更新您的应用。
  • 如果您之前生成了新的上传密钥:请使用这个新的上传密钥为版本签名,然后再将这些版本上传到 Google Play。上传这些版本后,Google 会检查相应版本的上传密钥以验证您的身份。如果您丢失了上传密钥,则可以与支持团队联系以重置上传密钥

创建上传密钥并更新密钥库

为了提高安全性,建议您使用新的上传密钥(而不是应用签名密钥)为应用签名。

您可以在选择加入 Google Play 应用签名计划时创建上传密钥,也可以之后通过访问版本管理 > 应用签名来创建上传密钥。

要创建上传密钥,请按以下步骤操作:

  1. 按照 Android 开发者网站上的说明进行操作。将密钥存放在安全的地方。
  2. 将上传密钥的证书导出为 PEM 格式。替换以下带下划线的参数:
    • $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
  3. 发布过程中如果出现提示,请上传证书以向 Google 注册该证书。

当您使用上传密钥时:

  • 上传密钥只会在 Google 中注册,我们会用它来验证应用创建者的身份。
  • 在将您上传的任何 APK 发布给用户之前,我们都会从中移除您的签名。
上传密钥限制
  • 必须为不小于 2048 位的 RSA 密钥。
  • 不支持 DSA 密钥、EC 密钥或小于 2048 位的 RSA 密钥。
更新密钥库

创建上传密钥后,您可能需要查看和更新以下位置:

  • 本地计算机
  • 上锁保护的现场服务器(变化的 ACL)
  • 云计算机(变化的 ACL)
  • 专属机密管理服务
  • (Git) 存储区

最佳做法

  • 如果您还在 Google Play 之外分发应用或未来打算这样做,则可以在选择加入 Google Play 应用签名计划时生成要在每个应用商店中使用的应用签名密钥,然后再将其上传到 Google。
  • 为了保护您的帐号,请为可访问您的 Play 管理中心的帐号开启两步验证
  • 在将 app bundle 发布到测试轨道或正式版轨道之后,您可以访问 app bundle 探索器,以下载一个包含适用于特定设备的所有 APK 的 ZIP 压缩文件。这些 APK 均使用应用签名密钥进行了签名,您可以使用 bundletool 命令行实用工具在设备上安装 ZIP 压缩文件中包含的 APK。
  • 为了提高安全性,请生成与您的应用签名密钥不同的新上传密钥。
  • 如果您想要测试通过上传密钥签名的 APK,则必须向使用您应用的签名进行身份验证的任何服务或 API(例如 Google Maps API 或 Facebook SDK)注册您的上传密钥。
  • 如果您使用了任何 Google API,建议您在 Google Cloud Console 为您的应用注册上传证书。

上传密钥丢失或被盗

如果您丢失了自己的私有上传密钥或者密钥被盗,则可以创建一个新密钥,然后让您的帐号所有者联系支持团队以重置该密钥。联系支持团队时,请确保您的帐号所有者随附了 upload_certificate.pem 文件。

在我们的支持团队注册新的上传密钥后,您会收到一封电子邮件,然后您可以更新密钥库,并向 API 提供商注册密钥。

注意:重置上传密钥并不会影响 Google Play 在您向用户提供 APK 之前用于对 APK 重新签名的应用签名密钥。

本文是否对您有帮助?
您有什么改进建议?