Google Play应用签名和签名级别权​​限

时间:2019-04-30 06:46:29

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

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

2 个答案:

答案 0 :(得分:2)

您发现,共享相同的上传密钥并不意味着应用签名密钥也将被共享。但是,当您首次注册Play进行App Signing时,有一种方法可以实现:在注册卡的“高级”部分下,有一个选项可以重复使用已经在App Signing中注册的另一个应用程序的App Signing密钥。

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

此内容记录在此page的“选择通过Google Play进行应用签名”>“新应用”中。

希望有帮助,

答案 1 :(得分:1)

我已经进行了一些研究,我想在这里解释 Google Play应用签名的工作原理以及如何在获得签名级别许可的情况下使用它。

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

应用签名密钥存储在Google Play中,上传后我们无权访问。当我们为现有应用注册到Google Play应用签名时,我们可以上载它,也可以由新应用的Google Play生成它,然后我们将完全无法访问它。我们可以说应用程序签名密钥实际上是我们用于为用户分发应用程序的真实密钥。

整个机制如下:

Google Play app signing mechanism

Image source (Official app signing documentation)

您可以在图片上看到,我们使用 Upload Key (上载密钥)将我们的应用程序上传到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会询问:

enter image description here 然后在高级选项下,我们可以找到:

enter image description here

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

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