Android开发:Keytool,创建一个密钥库?

时间:2013-11-03 13:35:25

标签: android eclipse certificate keystore keytool

我正在尝试为谷歌市场准备我的应用程序,但它证明比预期更具挑战性。我似乎无法掌握签署应用程序的整个概念,但更具体地说,我的问题是我已经为eclipse安装了keytool插件,但是当我想创建一个证书时,它要求我选择一个密钥库(输入文件名和密钥库密码),我不明白我应该输入什么文件,因为它实际上要我通过浏览选择文件,如何继续导出文件,谷歌已经遗憾的是没有得到非常好或明确的答案

1 个答案:

答案 0 :(得分:23)

您需要为新密钥库文件提供位置和文件名,以备您创建新密钥库文件时使用。或者,您可以选择“使用现有密钥库”并浏览到现有密钥库文件位置。

编辑:我想我会提供详尽的答案。希望这些信息有用。

什么是签名以及为什么需要签名。

android使用的apk签名机制是应用于应用程序的字节码和资源的示例usage of digital signature,以确保:

  • 完整性(下载后不会篡改您的应用)
  • 真实性 - 您是将应用程序发布到GooglePlay的人

为了更好地了解digital signature,我建议您浏览public-key cryptography

这是如何运作的。

Android使用与标准Java应用程序签名/验证相同的标准JDK工具:

  • jarsigner - 使用提供的private key对数据进行签名,并使用certificate验证数据(即与您的身份绑定的公钥)
  • keytool - 管理keystore中的私钥和证书。 jarsigner
  • 需要这些密钥

使用jarsigner手动签署应用程序或使用IDE导出已签名的应用程序(无论如何都使用keytooljarsigner),然后您可以找到与签名相关的文件放在已签名的.apk存档的META-INF目录中:

  • CERT.SF - 包含您应用组件的SHA哈希的文件和
  • CERT.RSA(或.DSA) - 上述文件的数字签名+公共证书,以验证此签名。 您可以阅读有关唱歌如何运作的更多详细信息here

如何正确签署申请以供发布。

This article很好地描述了您需要遵循的步骤。

注意:在继续签名之前,请考虑重要的预发布步骤:删除日志/关键字符串文字,使用proguard进行模糊处理等。

下面我将提供该过程的一些要点:

生成私钥并将其放入java keystore

如果您没有keystore,可能需要先创建keystore。在创建Keystore password时,您需要创建keystore,用于确保keystore数据的完整性(即,您将被警告您的密钥库被篡改后,某人 - 不是您 - 已添加新证书)。实际上,如果您保证private key文件安全,则此密码不是非常关键。如果有一天你忘了它就可以逃脱。

生成PrivateKey password时,系统还会要求您创建private key,用于加密密钥库中的私钥。 这是您需要保留的非常重要的密码,因为它确保了

  • 您的私有密钥实际上是私有。最重要的是
  • 如果没有此密码,您将无法使用私钥签署和发布应用程序的未来更新;

在Eclipse中生成新私钥时,还会要求您提供用于创建自签名证书的身份信息。

下一步,指定keystore文件中的.apk将用于对应用程序进行签名,您的alias将使用上述签名相关文件进行更新。

一些重要的术语:

密钥库只是一个二进制文件,保留了特定格式的私钥/证书列表。它可以使用KeyStore.java提供的API以编程方式访问。您的密钥库可以包含多个私钥条目,每个条目都由其keystore标识。
在大多数情况下,您的private key将拥有单个私钥,其中包含与此私钥匹配的单个自签名证书。

密钥库密码用于密钥库内容的完整性检查 如果您丢失了此密码,但您仍然拥有存储在其中的私钥的密码,则可以通过运行以下cmd来“克隆”您的密钥库并提供新的密钥库密码:

  

keytool -importkeystore -srckeystore   path / to / keystore / with / forgotten / pw -destkeystore   路径/到/我的/新的/密钥库

提供新密码,并将旧密钥库密码留空 - 您只会收到警告。然后,您可以使用新的密钥库并删除旧的密钥库 还有其他方法可以在不使用密钥库密码的情况下检索私钥。

私钥密码 - 在keystore内保护(通过加密).apk。这非常重要,因为它允许您访问您的私钥,以便为您的应用程序签署更新。通常很难恢复它。

自签名证书 - 将您的身份(姓名/组织/电子邮件)绑定到公钥的非常简单的证书。在签名操作期间,此证书将添加到.apk文件中,并将在用户设备上用于在安装前验证{{1}}。