了解密钥库,证书和别名

Rog*_*ger 94 android code-signing

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

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

Jul*_*rgé 126

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

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

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

例如,当您注册使用导出的Android应用程序签名了Eclipse的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认同)
  • 我重写了我的答案以使其更加准确。简而言之,您确实必须使用相同的别名来签署应用程序的所有更新。 (2认同)
  • @Julio那么最好的做法是对你要发布的所有不同应用程序使用相同的别名,如开发站点所示?我没有理由为您的所有应用创建单独的别名. (2认同)