了解密钥库,证书和别名

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

如果我使用不同的别名签署我的应用程序,它会搅乱市场上的更新吗? 或者我需要用不同的密钥库签名我的应用程序来搞砸了吗? 哪里可以查看别名的信息?

Keytool生成的密钥库文件存储私钥和公​​钥的配对。 存储在密钥库中的每一对或条目​​都由唯一的别名引用。 简单来说:

密钥库条目=私人+公共密钥对=由别名标识

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

例如,当您使用Eclipse Android工具的导出签名应用程序包选项签署Android应用程序时,系统会要求您先select一个密钥存储库,然后要求从该密钥存储库中select一个别名/入口/对。 为密钥库和所选别名提供密码之后,该应用程序将被签名,并将该别名的公钥(证书)embedded到APK中。

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

然而,有一种方法使用新的别名签名应用程序,但是它涉及使用keytool -keyclone克隆密钥库中的现有别名:

创build一个新的密钥库条目,该条目与原始条目具有相同的私钥和证书链。

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

如果私钥密码与密钥库密码不同,则只有在提供有效密钥通道的情况下才能克隆该条目。 这是用来保护与别名关联的私钥的密码。 如果在命令行中没有提供密钥密码,并且私钥密码与密钥存储密码不同,则会提示用户input该密码。 如果需要,克隆条目中的私钥可以使用不同的密码进行保护。 如果在命令行中没有提供新的选项,则提示用户input新条目的密码(并且可以select让它与克隆条目的私钥相同)。

更多信息:

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

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