密钥库和别名 - 多个别名有用吗?

时间:2010-04-19 12:39:01

标签: android eclipse google-play keystore

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

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

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

此外,生成的密钥是否依赖于别名的名称?换句话说,如果更改别名但不更改密码,生成的证书会不同吗?

3 个答案:

答案 0 :(得分:14)

如果我错了,请纠正我,但如果您看到this answer类似的问题,您会看到证书确实依赖于您选择与之签署的特定“别名”(在您的密钥库中)

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

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

唯一可以使用不同别名进行签名的方法是克隆前一个别名,如答案所示。

我还确认,使用不同的别名(来自同一个密钥库)签署一个APK会生成不同的APK signing signatures,这应该证明不同的“别名”=不同的证书。 How to get your signing sig(< - 注意:我不知道他们引用的Trace.i方法是什么,我使用的是Log.i)

答案 1 :(得分:7)

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

摘自Android - Signing Your Applications - Signing Strategies

  

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

答案 2 :(得分:3)

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

要回答OP,我会说,如果您在一家拥有多个部门的大型公司中编写自己的应用程序,这将非常有用。所以Wilson的Widgets可能有一个wilsonwidgets.keystore的密钥库,可能有一个内部部门有一个“widgetmakers”密钥,一个部门有一个“widgetdelivery”密钥,另一个部门有一个“hrdepartment”密钥。每个部门都可以阻止其他部门更新他们的应用程序,但公司本身将所有密钥存储在一个密钥库中,可以备份到一个位置。

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