【问题标题】:Google Play App Signing and signature level permissionGoogle Play 应用签名和签名级别权​​限
【发布时间】:2019-04-30 06:46:29
【问题描述】:

我尝试使用签名级别的权限以安全的方式在两个应用程序之间共享数据。不幸的是,即使我使用相同的upload key 登录这两个应用程序,Google Play 在上传到商店后也会更改其签名。因此,我的应用程序无法通信。 如果我们使用 Google Play 应用签名,如何使用相同的密钥/证书登录两个应用?

【问题讨论】:

    标签: android google-play android-app-signing


    【解决方案1】:

    如您所见,共享相同的上传密钥并不意味着应用签名密钥也将被共享。但是,当您首次注册 App Signing by Play 时,有一种方法可以做到这一点:在注册卡的“高级”部分下,有一个选项可以重复使用已注册 App Signing 的另一个应用的应用签名密钥。

    但是,您需要创建一个新应用,因为目前无法更改应用签名密钥。

    这已记录在此 page“选择加入 Google Play 应用签名”>“新应用”下。

    希望对你有帮助,

    【讨论】:

    • 如果应用程序已经发布并在第二个应用程序的upload key 登录的商店中可用怎么办?我可以注册 App Signing 并更改此密钥吗?更新呢?也许我应该在发布之前注册吧?
    • 您的两个应用程序都已完全发布并拥有用户群吗?如果其中至少一个不是,我建议创建另一个应用程序,因为无法更改应用程序签名密钥。如果这不是一个选项,我会联系 Play 管理中心的支持人员,看看他们是否可以做任何事情。
    【解决方案2】:

    我进行了一些研究,我想在这里解释一下 Google Play 应用签名 的工作原理以及如何在签名级别权​​限下使用它。

    首先,如果我们使用 Google Play 应用签名,我们实际上使用两个密钥来登录我们的应用。第一个是上传密钥,第二个是应用签名密钥。两者都是从 Android Studio 以相同的方式生成的,我们可以使用一个应用程序中的上传密钥作为另一个应用程序的应用程序唱歌密钥。

    应用签名密钥存储在 Google Play 中,上传后我们无法访问它。当我们为现有应用注册 Google Play App Signing 时,我们可以上传它,或者它可以由 Google Play 为新应用生成,然后我们根本无法访问它。我们可以说应用签名密钥实际上是我们用来为我们的用户分发应用程序的真正密钥。

    整个机制是这样的:

    Image source (Official app signing documentation)

    正如您在图片上看到的,我们使用 上传密钥 将我们的应用上传到 Google Play,然后 Google Play 删除我们的签名并使用不同的密钥登录我们的应用。这很有用,因为如果我们松开上传密钥,我们就不会失去上传应用程序的可能性(我们可以要求 Google 使用新的上传密钥)。此外,Google Play 现在可以将我们的应用拆分成更小的部分并独立分发,每个部分都将使用我们的应用签名密钥 (Android App Bundles) 进行登录。 这种解决方案的缺点是我们上传到商店的应用程序与我们从 Google Play 下载的应用程序具有不同的签名。 这是非常有问题的,特别是如果我们在我们的应用程序中使用签名级别的权限。此外,当我们想将我们的应用上传到与 Google Play 不同的商店时,这也是一个问题。

    通过使用签名级别权​​限,我们可以在两个应用程序之间以安全的方式共享数据 (use case example),但有一个主要条件 - 两个应用程序必须具有相同的签名。 即使我们使用相同的上传密钥,这并不意味着我们的应用程序将具有相同的签名,因为 Google Play 使用的密钥可能不同。 在实践中,这意味着当您测试应用程序的发布版本时,一切看起来都很好,但在将其上传到 Google Play 后它就不起作用(这个问题会影响依赖于应用程序签名的每个功能 - facebook 登录、篡改检测)。

    那么,当我们使用 Google Play 应用签名时,如何为两个应用使用相同的密钥呢? 当我们在 Google Play 中创建新应用并尝试创建第一个生产版本时,Google Play 会询问:

    然后在高级选项下我们可以找到:

    之后,这两个应用程序将为我们的用户使用相同的签名。 不幸的是,如果我们尝试为已经为我们的用户发布的应用程序执行此操作(我们可以稍后注册 Google Play 应用程序签名),我们没有此选项可用,并且我们不能使用相同的密钥。

    如果我们做不到,但我们想在两个应用程序之间使用安全数据共享,该怎么办? 我们可以手动验证不同的签名,并尝试防止来自我们提供数据的应用程序内部的攻击。它不像第一个解决方案那样安全,但比什么都不做更安全:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-19
      • 2018-03-11
      • 1970-01-01
      • 2017-10-24
      • 2022-07-13
      • 2018-02-05
      • 2018-01-02
      • 1970-01-01
      相关资源
      最近更新 更多