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

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

23

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

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

什么是签名,为什么需要它。

Android使用apk签名机制,这是一个示例数字签名的用法应用于应用程序的字节代码和资源,以确保:

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

为了更好地理解数字签名,建议您也浏览公钥加密

它是如何工作的。

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

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

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

  • CERT.SF - 包含应用组件 SHA 散列的文件
  • CERT.RSA (或 .DSA) - 上述文件的数字签名 + 公共证书以验证此签名。
  • 你可以在这里阅读更多关于签名工作的细节。

如何正确地为发布签名应用程序。

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

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

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

生成私钥并将其放入Java keystore中。

This may require creating keystore first if you don't have one. When creating keystore, you need to create a Keystore password that is used to ensure the integrity of the keystore data (i.e. you will be warned that your keystore is tampered with after someone - not you - has added a new certificate to it). Practically, this password is not super crucial if you keep your keystore file safe. You can get away if you forget it someday.
When generating a private key, you will also be asked to create a PrivateKey password that will be used to encrypt your private key inside the keystore. This is the very important password you need to keep as it ensures:
  • Your private key is really private, and most importantly
  • Without this password, you won't be able to use your private key to sign and release future updates for your application;
When you generate your new private key in Eclipse, you will also be asked to provide identity information that is used to create your self-signed certificate.
作为下一步,将使用指定的keystore文件中的private key来签名应用程序,您的.apk将更新为上面解释的与签名相关的文件。

一些重要的术语:

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

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

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

提供新密码,将旧密钥库密码留空 - 您只会收到警告。然后,您可以使用新密钥库并摆脱旧密钥库。
还有其他方法可以检索私钥,而无需使用密钥库密码。 私钥密码 - 保护(通过加密)密钥库内部的私钥。它非常重要,因为它允许您访问私钥,以便签署应用程序的更新等操作。通常很难恢复它。 自签名证书 - 非常简单的证书,将您的身份(名称/组织/电子邮件)与您的公钥绑定。在签名操作期间,此证书将添加到.apk文件中,并将在用户设备上用于验证.apk文件,以确保安装安全。

它告诉我创建密钥库时出错并关闭了keytool窗口.. :\ - Oliver
错误日志非常长,你需要哪些部分? - Oliver
错误信息不太合理,它说:“通知部分监听器时发生了异常”和“从插件org.eclipse.e4.ui.workbench调用代码时出现问题”,但我的应用程序运行良好,没有任何错误。 - Oliver
嗯,你尝试使用标准的eclipse工作流为你的应用程序签名了吗:http://developer.android.com/tools/publishing/app-signing.html#ExportWizard?通常情况下应该很容易,而且会适用于你,因为你自己编译源代码。 - kiruwka
@Oliver 我在我的答案中添加了详细的描述,请看一下,希望对你有用。 - kiruwka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接