使用 Play 应用签名功能

借助 Play 应用签名功能,Google 可为您管理和保护应用的签名密钥,并使用此密钥为通过您 app bundle 生成的经过优化的分发 APK 签名。Play 应用签名功能会将您的应用签名密钥存储在 Google 的安全基础架构中,并提供升级选项来提高安全性。

要使用 Play 应用签名功能,您必须是帐号所有者或拥有发布为正式版,排除设备以及使用 Play 应用签名功能权限的用户,并且需要接受 Play 应用签名服务条款

运作方式

如果您使用 Play 应用签名功能,系统会将您的密钥存储在 Google 用来存储自有密钥的同一安全基础架构中。密钥会受 Google 密钥管理服务的保护。如果您想详细了解 Google 的基础架构,请参阅 Google Cloud 安全性白皮书

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

注意:对于 2021 年 8 月之前创建的应用,您仍然可以上传 APK 并管理自己的密钥,而不使用 Play 应用签名功能,也不使用 Android App Bundle 来发布应用。不过,在这种情况下,如果您的密钥库丢失或被盗,您将无法更新自己的应用,而必须改用新的软件包名称来发布新应用。对于这些应用,Play 建议使用 Play 应用签名并切换到 app bundle。

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

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

请勿将您的应用签名密钥告知他人,不过您可以与其他人分享应用的公钥证书。

上传密钥

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

可以通过以下两种方式生成上传密钥:

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

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

若要向 API 提供商注册您的密钥,可以从 Play 管理中心内的 Play 应用签名页面(版本 > 设置 > 应用完整性)下载您的应用签名密钥和上传密钥所对应的公钥证书。您可以与任何人分享公钥证书。公钥证书不包含您的私钥。

证书指纹

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

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

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

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

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

应用签名流程

具体流程如下:

  1. 为您的 app bundle 签名,并将其上传到 Play 管理中心
  2. Google 会通过您的 app bundle 生成经过优化的 APK,然后使用应用签名密钥为 APK 签名。
  3. Google 会使用 apksigner 向应用的清单中添加两个戳记(com.android.stamp.sourcecom.android.stamp.type),然后使用您的应用签名密钥为 APK 签名。根据 apksigner 添加的戳记,可以追溯 APK 的签名者。
  4. Google 向用户提供已签名的 APK。

配置 Play 应用签名

针对 2021 年 8 月之后创建的应用的说明

第 1 步:创建上传密钥

  1. 按照相应说明创建上传密钥。
  2. 使用上传密钥为 app bundle 签名。

第 2 步:准备应用版本

  1. 按照说明准备和发布版本
  2. 选择发布轨道后,“应用完整性”部分会显示您应用的 Play 应用签名状态。
  3. 如需继续使用 Google 生成的应用签名密钥,请上传您的 app bundle。或者,您也可以选择更改应用签名密钥来访问以下选项:
    • 使用 Google 生成的应用签名密钥:有超过 90% 的新应用使用 Google 生成的应用签名密钥。使用 Google 生成的密钥有助于防范密钥丢失或泄露(密钥无法下载)。如果您选择此选项,则可以从 App bundle 资源管理器下载使用 Google 生成的密钥签名的分发 APK,以供在其他渠道分发;也可为这些渠道的版本使用其他密钥。
    • 使用其他应用签名密钥:通过选择应用签名密钥,您可以使用与开发者帐号中的另一个应用相同的密钥,或者在本地保留应用签名密钥的副本,以提高灵活性。例如,您可能已确定使用某个密钥,因为某些设备上已预安装了您的应用。如果将密钥副本保存在 Google 服务器之外,当本地副本发生泄露时,会增加风险。您可以通过以下选项了解如何使用其他密钥:
      • 使用与这个开发者帐号中的其他应用相同的应用签名密钥
      • 从 Java 密钥库导出并上传密钥
      • 导出并上传密钥(不使用 Java 密钥库)
  4. 按照剩下的说明准备和发布版本

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

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

如果您的应用使用任何 API,您通常需要向其注册应用签名密钥,以便使用证书的指纹进行身份验证。查找证书的方法如下:

  1. 打开 Play 管理中心,然后转到 Play 应用签名页面(版本 > 设置 > 应用完整性)。
  2. 滚动到“应用签名密钥证书”部分,然后复制应用签名证书的指纹(MD5、SHA-1 和 SHA-256)。
    • 如果 API 提供商需要其他类型的指纹,您也可以下载 .der 格式的原始证书,并使用 API 提供商要求的转换工具转换该证书。
应用签名密钥要求

当您使用 Google 生成的密钥时,Google 会自动生成一个 4096 位的强加密 RSA 密钥。如果您选择上传自己的应用签名密钥,该密钥必须为不小于 1024 位的 RSA 密钥。

针对 2021 年 8 月之前创建的应用的说明

第 1 步:配置 Play 应用签名

  1. 打开 Play 管理中心,然后转到 Play 应用签名页面(版本 > 设置 > 应用完整性)。
  2. 如果您尚未接受 Play 应用签名服务条款,请查看条款内容并选择接受

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

  1. 找到您的原始应用签名密钥。
  2. 打开 Play 管理中心,然后转到 Play 应用签名页面(版本 > 设置 > 应用完整性)。
  3. 选择最适合您的发布流程的导出和上传选项,并上传现有的应用签名密钥。

第 3 步:创建上传密钥(可选,建议创建)

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

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

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

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

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

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

您可以在选择加入 Play 应用签名计划时创建上传密钥,也可以之后通过访问 Play 应用签名页面(版本 > 设置 > 应用完整性)来创建上传密钥。

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

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

当您使用上传密钥时:

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

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

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

为新安装的应用升级应用签名密钥

在某些情况下,您可以请求升级应用签名密钥。对于新安装的应用或其更新,将使用此新密钥进行签名。对于在您的应用签名密钥升级之前便已安装该应用的用户,应用更新仍将使用您的旧版密钥来签名。

在每个应用的生命周期内,其应用签名密钥只能升级一次。在极少数情况下,假如您有多个应用使用相同的签名密钥并且在同一进程中运行,则无法使用密钥升级功能。

以下是请求升级应用签名密钥的几种原因:

  • 您需要加密强度更高的密钥。
  • 您的应用签名密钥已被盗。

注意:在 Play 管理中心请求升级应用签名密钥与 Android P 及更高版本的 APK 签名方案 v3 中引入的密钥轮换机制无关。Google Play 目前不支持此类密钥轮换功能。

请求升级密钥前的重要注意事项

在请求升级密钥之前,请务必先了解升级完成后您可能需要做出的更改。

  • 如果您为多个应用使用相同的应用签名密钥,以便在它们之间共享数据/代码,则需要更新这些应用以使它们同时能够识别新旧两版应用签名密钥证书。
  • 如果您的应用使用 API,请务必在 API 提供商那里注册新旧两版应用签名密钥的证书,以确保 API 能继续正常运行。您可以在 Play 管理中心内的 Play 应用签名页面(版本 > 设置 > 应用完整性)上找到相应证书。 
  • 如果您有任何用户通过点对点共享安装更新,那么只有当要安装的更新的签名密钥与其已安装的应用版本所用的密钥相同时,他们才能安装。如果用户的应用版本因使用不同的签名密钥而无法更新,则可以选择卸载并重新安装应用以获取更新。
请求为新安装的应用升级密钥
  1. 打开 Play 管理中心,然后转到 Play 应用签名页面(版本 > 设置 > 应用完整性)。
  2. 在“升级您的应用签名密钥,以便有新安装时签名”卡片中,选择请求升级密钥
  3. 选择一个选项。
    • 根据您选择的选项,您可能需要与支持团队联系以完成请求流程。
  4. 让 Google 生成新的应用签名密钥(推荐)或上传密钥。
    • 应用签名密钥升级后,如果您的应用签名密钥和上传密钥相同,则可继续用旧版应用签名密钥作为上传密钥,也可以生成新的上传密钥。
  5. 如有必要,请向 API 提供商注册新的应用签名密钥。

最佳做法

  • 如果您还在 Google Play 之外分发应用或未来打算这样做,并想使用同一个签名密钥,则有以下两种选择:
    • 让 Google 生成该密钥(推荐),然后从 App bundle 资源管理器下载已签名的通用 APK,以便在 Google Play 之外分发。
    • 或者,您也可以先生成要针对所有应用商店使用的应用签名密钥,然后在配置 Play 应用签名时将该密钥的副本传输到 Google。
  • 为了保护您的帐号,请为可访问 Play 管理中心的帐号开启两步验证
  • 在将 app bundle 发布到发布轨道后,您可以访问 App bundle 资源管理器,以获取 Google 通过您的 app bundle 生成的可安装 APK。您可以:
    • 复制并分享内部应用分享链接,通过该链接,您只需点按一下,即可测试 Google Play 会通过您的 app bundle 在不同设备上安装什么。
    • 下载已签名的通用 APK。这个 APK 使用 Google 持有的应用签名密钥进行了签名,可安装在您的应用支持的任何设备上。
    • 下载一个包含适用于特定设备的所有 APK 的 ZIP 压缩文件。这些 APK 均使用 Google 持有的应用签名密钥进行了签名,您可以使用 adb install-multiple *.apk 命令在设备上安装该 ZIP 压缩文件中的 APK。
  • 为了提高安全性,请生成与您的应用签名密钥不同的新上传密钥。
  • 如果您使用了任何 Google API,建议您在 Google Cloud Console 为您的应用注册上传密钥证书和应用签名密钥证书。

上传密钥丢失或被盗

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

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

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

APK 签名方案 v4

搭载 Android 11 及更高版本的设备支持新的 APK 签名方案 v4。Play 应用签名计划将开始面向选定应用推出 v4 签名,以使这些应用能够选择使用在较新设备上即将提供的性能相关功能。这项举措无需开发者采取任何行动,也不会影响用户。

 

该内容对您有帮助吗?
您有什么改进建议?

需要更多帮助?

登录可获取更多支持选项,以便快速解决您的问题

搜索
清除搜索查询
关闭搜索框
Google 应用
主菜单
搜索支持中心
true
92637
false