19

使用 Eclipse 导出已签名的 Android 应用程序时,是否有使用多个别名的目的?

根据有关签名的官方指南,建议您使用相同的证书对所有应用程序进行签名,以允许您的应用程序共享数据、代码并以模块化方式更新。

假设“别名”、“密钥”和“证书”在这种情况下本质上是可以互换的,那么是否有人愿意他们的所有应用程序使用不同的别名?我能想到的唯一原因是它为您的应用程序增加了更多的安全性,因为泄露的密钥/密码不会泄露所有内容。还有其他原因吗?

另外,生成的密钥是否取决于别名的名称?换句话说,如果您更改别名的名称而不更改密码,则生成的证书会有所不同吗?

4

3 回答 3

15

如果我错了,请纠正我,但如果您看到类似问题的答案,您会发现证书确实取决于您选择签名的特定“别名”(在您的密钥库中)。

仔细阅读答案,您会看到“密钥库”包含“别名”(实际上是私钥+公钥对)。当您签署您的 apk 时,它是“公钥”,即嵌入的实际证书。

因此,在更新您的应用程序时,您应该始终使用相同的“别名”,而不仅仅是相同的“密钥库”。至于为什么开发人员在他们的密钥库中有多个“别名”,除了你和其他人所说的之外,我不确定它的好处。

正如答案所暗示的那样,您可以使用其他别名进行签名的唯一方法是克隆前一个别名。

我还确认使用不同别名(来自同一个密钥库)签署一个 APK 将生成不同的 APK签名签名,这应该证明不同的“别名”=不同的证书。如何获得您的签名(<- 注意:我不知道他们所指的 Trace.i 方法是什么,我使用 Log.i 代替)

于 2011-10-12T09:35:39.040 回答
9

请注意,通过使用不同的密钥对应用程序进行签名,您会牺牲应用程序之间的“基于签名的权限”互操作性。

摘自Android - 签署您的应用程序 - 签署策略

Android 系统提供基于签名的权限强制执行,以便应用程序可以向使用指定证书签名的另一个应用程序公开功能。通过使用相同的证书签署多个应用程序并使用基于签名的权限检查,您的应用程序可以以安全的方式共享代码和数据。

于 2013-03-12T18:46:31.050 回答
3

我正在做一些测试,尽管您在密钥库中使用哪个密钥似乎很重要,但更改密钥上的别名和密钥库文件的名称对手机来说似乎并不重要。如果你很好奇,我用我从这里得到的 keytool-iui 更改了别名:http ://code.google.com/p/keytool-iui/

为了回答 OP,我想说如果您在一家拥有多个部门编写自己的应用程序的大公司工作,这很有用。因此,Wilson 的小部件可能有一个 wilsonwidgets.keystore 的密钥库,并且可能有一个内部部门具有“widgetmakers”密钥,一个部门具有“widgetdelivery”密钥,另一个部门具有“hrdepartment”密钥。每个部门都可以阻止其他部门更新他们的应用程序,但公司本身将所有密钥存储在一个密钥库中,可以备份到一个位置。

就个人而言,我使用不同的密钥对每个应用程序进行签名,并将它们全部存储在同一个密钥库中。我这样做是因为如果 Google 决定从我这里购买我的一个应用程序,我可以断开那个密钥并将其提供给他们,而无需将其全部出售或为其他应用程序重新生成密钥。实际上...我只是在浪费时间和精力...叹息

于 2012-06-12T18:54:11.267 回答