2011-07-27 239 views
100

这是一个普遍的问题,但我特别感兴趣的是它用于Android。什么是密钥库文件,它用于什么?什么是Android密钥库文件,它的用途是什么?

多个Android应用程序可以使用相同的密钥库来签署他们的应用程序(究竟是什么意思“签署”.apk?),这有什么含义?

+0

你似乎在混淆两个主题。首先是密钥库,其次是APK签名。另请参阅Nikolay Elenkov的[Android安全内幕:Android安全架构深入指南](https://www.amazon.com/dp/1593275811)。 – jww

回答

105

我会提供的答案是一个密钥库文件是要向任何询问的人进行身份验证。它不仅限于签署.apk文件,您可以使用它来存储个人证书,签名要传输的数据以及各种身份验证。

根据您对Android的操作以及自从您提及签名apk之后所寻找的内容,它是您的证书。您正在使用凭证标记您的应用程序。您可以使用相同的密钥标记多个应用程序,实际上,建议您使用一个证书来标记您编写的多个应用程序。跟踪哪些应用程序属于您更容易。

我不确定您的含义是什么。我想这意味着除证书持有者外,没有人可以更新您的申请。这意味着,如果您将它放到无人机中,丢失用于签署应用程序的证书,则无法发布更新,因此请保证证书安全并在需要时进行备份。

但除了签署apks释放到野外,您可以使用它来通过SSL验证您的设备到服务器,如果你愿意,(也是与Android相关的)和其他功能。

+26

我爱你的术语“释放到野外” – bluezald

+2

非常好的答案。此处还应该注意,如果要在应用程序中使用“推送数据”,则需要密钥存储文件! – KapteinMarshall

+0

Keystore机器是否特定?或者我们可以在任何机器上使用它来更新我们的应用程序? – Yawar

0

keytool的整个想法是用一个唯一的标识符来签署你的apk,然后将该apk的源代码传递给它。一个密钥库文件(根据我的理解)用于调试,所以你的apk有一个keytool的功能,而无需签名你的apk文件。所以是的,为了调试的目的,你应该能够用一个密钥库签署多个apk,但是在推送到产品时需要理解你需要唯一的keytools作为每个apk的标识符。

+0

无需在模拟器或实际设备上签名应用程序即可对其进行调试。 – Marcus

+0

我并不是说你必须签署它才能调试它......但是你可以使用keystore作为你的keytool的测试实现。 –

+0

我不认为'keytool'就是你的意思。 keytool是一个用于生成密钥库的java程序。 – Otra

7

你可以在官方找到更多关于签名过程的信息Android文档:http://developer.android.com/guide/publishing/app-signing.html

是的,您可以使用相同的密钥库签署多个应用程序。但是您必须记住一件重要的事情:如果您在Play商店中发布应用,则必须使用非调试证书对其进行签名。如果有一天你想发布这个应用程序的更新,用于签署apk的密钥库必须是相同的。否则,您将无法发布更新。

14

Android Market要求您使用公钥/私钥机制(证书是使用您的私钥签名的)签署所有使用证书发布的应用程序。这提供了一个安全层,可以防止远程攻击者将恶意更新推向市场(所有更新都必须使用相同密钥进行签名)。

从Android开发者网站的App-Signing Guide

一般来说,所有开发人员的建议的策略是签署所有应用程序使用同一证书,整个应用程序的预期寿命。有几个原因,你应该这样做......

使用相同的密钥有几个好处 - 其中之一是,它更容易共享使用相同的密钥签名的应用程序之间的数据。另一个原因是它允许使用相同密钥签署的多个应用程序在同一个进程中运行,因此开发人员可以构建更多“模块化”应用程序。

相关问题