【发布时间】:2011-08-09 03:20:26
【问题描述】:
密钥库是实际证书,还是别名是证书?
如果我使用不同的别名来签署我的应用程序,它会扰乱市场上的更新吗?或者我是否需要使用不同的密钥库对我的应用程序进行签名才能搞砸?别名下的信息从哪里可以查看?
【问题讨论】:
标签: android code-signing
密钥库是实际证书,还是别名是证书?
如果我使用不同的别名来签署我的应用程序,它会扰乱市场上的更新吗?或者我是否需要使用不同的密钥库对我的应用程序进行签名才能搞砸?别名下的信息从哪里可以查看?
【问题讨论】:
标签: android code-signing
Keytool 生成的密钥库文件存储一对私钥和公钥。存储在密钥库中的每一对或条目都由一个唯一别名引用。简而言之:
密钥库条目 = 私钥 + 公钥 pair = 由别名标识
密钥库使用其单独的密码保护每个私钥,并使用(可能不同的)密码保护整个密钥库的完整性。
例如,当您使用 Eclipse Android 工具的 Export Signed Application Package 选项对 Android 应用程序进行签名时,系统会要求您首先选择一个密钥库,然后要求您从该密钥库中选择一个别名/条目/对。在为密钥库和所选别名提供密码后,应用程序被签名,该别名的公钥(证书)嵌入到 APK 中。
现在回答您的问题,您只能通过使用相同别名再次对更新进行签名来发布使用别名“foo”签名的应用程序的更新。丢失存储别名的密钥库会阻止您发布应用的更新版本。
但是,有一种方法可以使用新别名为应用签名,但它涉及使用 keytool -keyclone 克隆密钥库中的现有别名:
创建一个新的密钥库条目,它 具有相同的私钥并且 证书链作为原始 进入。
原始条目由 别名(默认为“mykey”,如果 不提供)。新的(目的地) 条目由 dest_alias 标识。如果 没有提供目标别名 命令行,提示用户 为它。
如果私钥密码是 不同于密钥库密码, 那么只有在以下情况下才会克隆该条目 提供了有效的密钥通行证。这是 用于保护的密码 与别名关联的私钥。如果 没有提供密钥密码 命令行和私钥 密码不同于 密钥库密码,用户是 提示它。私钥在 克隆的条目可能会受到保护 如果需要,可以使用不同的密码。如果 没有提供 -new 选项 命令行,提示用户输入 新条目的密码(并且可能 选择让它和for一样 克隆条目的私钥)。
更多信息:
http://download.oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.html
http://developer.android.com/guide/publishing/app-signing.html
【讨论】: