3

I try to use signature level permission to share data between two apps in secure way. Unfortunately even if i use the same upload key for signing in both apps the Google Play changes their signature after uploading to the store. Because of that, my apps can't communicate. How to sign in two apps with the same key/certificate if we use google play app signing?

4

2 回答 2

2

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

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

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

整个机制是这样的:

Google Play 应用签名机制

图片来源(官方应用签名文档)

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

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

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

在此处输入图像描述 然后在高级选项下我们可以找到:

在此处输入图像描述

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

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

于 2019-05-02T10:15:16.067 回答
2

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

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

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

希望有帮助,

于 2019-04-30T08:34:29.547 回答