了解密钥库,证书和别名


95

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

如果我使用其他别名对我的应用程序进行签名,它会搞乱市场上的更新吗?还是我需要使用其他密钥库对我的应用进行签名以使事情搞砸?别名下的信息在哪里可以查看?

Answers:


127

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

密钥库条目=专用+公钥对=用别名标识

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

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

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

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

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

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

如果私钥密码与密钥库密码不同,则只有提供了有效的密钥密码,才会复制该条目。这是用于保护与别名关联的私钥的密码。如果命令行没有提供密钥密码,并且私钥密码与密钥库密码不同,则会提示用户输入密码。如果需要,可以使用其他密码来保护克隆条目中的私钥。如果命令行没有提供-new选项,则会提示用户输入新条目的密码(并且可以选择使其与克隆条目的私钥相同)。

更多信息:

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

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


3
开发人员站点建议对所有应用程序使用相同的证书。这是否意味着,只要我使用相同的密钥库,我就可以使用具有任何密码的任何别名,并且它不会弄乱更新,因为它只是参考?实际的密钥库是重要的部分?
罗杰

1
我改写了我的答案,以便更加准确。简而言之,您确实必须使用相同的别名来对应用程序的所有更新进行签名。
JulioGorgé11年

2
@Julio因此,最佳实践是按照开发者网站的建议对要发布的所有不同应用程序使用相同的别名吗?我看不出有理由为您的所有应用创建单独的别名。
Tony Chan

@JulioGorgé-嘿,我只是想知道R别名区分大小写。
名字是Nilay

@JulioGorgé是指相同的别名还是相同的密钥。别名只是一个名称,我可以重命名别名。只要应用程序中的键(特定的公共键)匹配,就可以发布更新。
Dheeraj Bhaskar 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.