ChatGPT解决这个技术问题 Extra ChatGPT

了解密钥库、证书和别名

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

如果我使用不同的别名来签署我的应用程序,它会扰乱市场上的更新吗?或者我是否需要使用不同的密钥库对我的应用程序进行签名才能搞砸?别名下的信息从哪里可以查看?


E
EvilTeach

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

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

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

例如,当您使用 Eclipse Android 工具的 Export Signed Application Package 选项对 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


开发网站建议对所有应用使用相同的证书。那么这是否意味着,只要我使用相同的密钥库,我就可以使用具有任何密码的任何别名,并且它不会弄乱更新,因为它只是一个参考?实际的密钥库是重要的部分吗?
我重写了我的答案以更准确。简而言之,您确实必须使用相同的别名来签署您的应用程序的所有更新。
@Julio那么最好的做法是对您想要发布的所有不同应用程序使用相同的别名,正如开发网站所建议的那样?我认为没有理由为您的所有应用创建单独的别名。
@JulioGorgé-嘿,我只是想知道 R 别名区分大小写..??
@JulioGorgé 你的意思是同一个别名还是同一个键。别名只是一个名字,我可以重命名别名。只要应用程序中的密钥(具体来说是公钥)匹配,您就可以发布更新。