了解密钥库,证书和别名

时间:2011-04-20 01:34:22

标签: android code-signing

密钥库是实际证书,还是证书的别名?

如果我使用不同的别名来签署我的应用程序,它会搞砸市场上的更新吗?或者我是否需要使用不同的密钥库来签署我的应用程序以解决问题?别名中的信息可以从哪里查看?

1 个答案:

答案 0 :(得分:126)

Keytool生成的密钥库文件存储私钥和公​​钥对。存储在密钥库中的每个对或条目由唯一别名引用。简而言之:

  

密钥库条目=私有+公钥   pair =由别名

标识

密钥库使用其个人密码保护每个私钥,并使用(可能不同的)密码保护整个密钥库的完整性。

例如,当您使用Eclipse Android工具的“导出签名应用程序包”选项对Android应用程序进行签名时,系统会要求您首先选择一个密钥库,然后要求从该密钥库中选择一个别名/条目/对。在为密钥库和所选别名提供密码后,应用程序将被签名,并且该别名的公钥(证书)将嵌入到APK中。

现在回答您的问题,您只能通过使用相同的别名再次对更新进行签名来释放使用别名'foo'签名的应用程序的更新。丢失存储别名的密钥库会阻止您发布应用程序的更新版本。

但是,有一种方法可以使用新别名对应用进行签名,但它涉及使用 keytool -keyclone 克隆密钥库中的现有别名:

  

创建一个新的密钥库条目   拥有相同的私钥和   证书链作为原件   条目。

     

原始条目由标识   别名(默认为“mykey”if   不提供)。新的(目的地)   条目由dest_alias标识。如果   没有提供目的地别名   在命令行中,提示用户   为了它。

     

如果私钥密码是   与密钥库密码不同,   那么只有克隆了这个条目   提供有效的keypass。这是   用于保护的密码   与别名关联的私钥。如果   没有提供密钥密码   命令行和私钥   密码不同于   密钥库密码,用户是   提示它。私钥   克隆的条目可能受到保护   如果需要,可以使用其他密码。如果   没有新的选项   命令行,提示用户   新条目的密码(也许可以   选择让它与之相同   克隆条目的私钥)。

更多信息:

http://download.oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.html

http://developer.android.com/guide/publishing/app-signing.html