Noções básicas sobre armazenamento de chaves, certificados e alias


95

O keystore é o certificado real ou o alias é o certificado?

Se eu usar um alias diferente para assinar meu aplicativo, isso atrapalhará as atualizações do mercado? Ou eu precisaria assinar meu aplicativo com um armazenamento de chaves diferente para bagunçar as coisas? E de onde as informações sob o alias podem ser visualizadas?

Respostas:


127

O arquivo de armazenamento de chaves gerado pelo Keytool armazena pares de chaves privadas e públicas. Cada par ou entrada armazenado no keystore é referenciado por um alias exclusivo. Em resumo:

Entrada de armazenamento de chaves = par de chaves privadas + públicas = identificada por um alias

O keystore protege cada chave privada com sua senha individual e também protege a integridade de todo o keystore com uma senha (possivelmente diferente).

Por exemplo, ao assinar um aplicativo Android usando a opção Export Signed Application Package da ferramenta Eclipse Android, é solicitado que você selecione um keystore primeiro e, em seguida, selecione um único alias / entrada / par desse keystore. Depois de fornecer as senhas para o armazenamento de chaves e o alias escolhido, o aplicativo é assinado e a chave pública (o certificado) para esse alias é incorporada ao APK.

Agora, para responder à sua pergunta, você só pode lançar uma atualização para um aplicativo que foi assinado com o alias 'foo' assinando a atualização novamente com o mesmo alias. Perder o keystore onde seu alias está armazenado evitaria que você lançasse uma versão atualizada de seu aplicativo.

No entanto, há uma maneira de assinar um aplicativo com um novo alias, mas envolve a clonagem de um alias existente no keystore usando keytool -keyclone :

Cria uma nova entrada de armazenamento de chaves, que possui a mesma chave privada e cadeia de certificados da entrada original.

A entrada original é identificada pelo alias (cujo padrão é "mykey" se não for fornecido). A nova entrada (destino) é identificada por dest_alias. Se nenhum alias de destino for fornecido na linha de comando, o usuário será solicitado a fazê-lo.

Se a senha da chave privada for diferente da senha do keystore, a entrada só será clonada se um keypass válido for fornecido. Esta é a senha usada para proteger a chave privada associada ao alias. Se nenhuma senha de chave for fornecida na linha de comandos e a senha da chave privada for diferente da senha do keystore, o usuário será solicitado a fazê-lo. A chave privada na entrada clonada pode ser protegida com uma senha diferente, se desejado. Se nenhuma opção -new for fornecida na linha de comando, o usuário é solicitado a fornecer a senha da nova entrada (e pode optar por deixá-la ser a mesma da chave privada da entrada clonada).

Mais Informações:

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

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


3
O site dev sugere o uso do mesmo certificado para todos os seus aplicativos. Então, isso significa que, enquanto eu estiver usando o mesmo keystore, posso usar qualquer alias com qualquer senha e isso não atrapalhará as atualizações, já que é apenas uma referência? O keystore real é a parte importante?
Roger de

1
Reescrevi minha resposta para ser mais precisa. Resumindo, você deve realmente usar o mesmo alias para assinar todas as atualizações do seu aplicativo.
Julio Gorgé

2
@Julio Então, a prática recomendada seria usar o mesmo alias para todos os aplicativos diferentes que você deseja publicar, como sugere o site de desenvolvimento? Não vejo razão para criar um alias separado para todos os seus aplicativos.
Tony Chan

@ JulioGorgé-Ei, eu só queria saber que R alias-name diferencia maiúsculas de minúsculas .. ??
nome é Nilay

@ JulioGorgé você quer dizer o mesmo alias ou a mesma chave. Alias ​​é apenas um nome, posso renomear o alias. Você pode lançar uma atualização para contanto que as chaves (chaves públicas para ser específico) no aplicativo correspondam.
Dheeraj Bhaskar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.