9

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

4

1 回答 1

23

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

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

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

android使用的apk签名机制是应用程序的字节码和资源应用数字签名的示例用法,以确保:

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

为了更好地理解数字签名,我建议您也略读一下公钥密码学

这是如何运作的。

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

  • jarsigner - 使用提供的签名数据,并使用证书private key验证数据(即绑定到您的身份的公钥)
  • keytool - 管理您的keystore. 需要这些密钥jarsigner

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

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

如何正确签署释放申请。

本文很好地描述了您需要遵循的步骤。

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

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

生成您的私钥并将其放入 java keystore

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

生成时private key,您还将被要求创建PrivateKey password将用于在密钥库中加密您的私钥的内容。这是您需要保留的非常重要的密码,因为它可以确保

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

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

作为下一步,您private key的指定keystore文件将用于对应用程序进行签名,并且您.apk将使用上述与签名相关的文件进行更新。

一些重要的术语:

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

密钥库密码用于密钥库内容的完整性检查。
如果你丢失了这个密码,但你仍然有私钥存储在里面,你可以“克隆”你的密钥库并通过运行以下 cmd 提供新的密钥库密码:

keytool -importkeystore -srckeystore path/to/keystore/with/forgotten/pw -destkeystore path/to/my/new/keystore

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

私钥密码- 保护(通过加密)private key内部keystore。这非常重要,因为它允许您访问您的私钥,除其他外,为您的应用程序签名更新。一般很难恢复。

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

于 2013-11-03T13:41:40.280 回答