O que é o arquivo de armazenamento de chaves do Android e para que é usado?

128

Esta é uma pergunta geral, mas particularmente estou interessado em usá-lo para Android. O que é um arquivo keystore e para que é usado?

Vários aplicativos Android podem usar o mesmo keystore para assinar seu aplicativo (o que exatamente significa "assinar" um .apk?) E quais são as implicações (se houver) disso?

Christopher Perry
fonte
1
Você parece estar confundindo dois tópicos. O primeiro é o keystore e o segundo é a assinatura do APK. Veja também os Internals de segurança do Android de Nikolay Elenkov : um guia detalhado da arquitetura de segurança do Android .
JWW

Respostas:

130

A resposta que eu daria é que um arquivo keystore é para se autenticar com qualquer pessoa que esteja perguntando. Não se restringe apenas a assinar arquivos .apk, você pode usá-lo para armazenar certificados pessoais, assinar dados a serem transmitidos e toda uma variedade de autenticação.

Em termos do que você faz com ele no Android e provavelmente o que você está procurando desde que mencionou a assinatura de apk, é o seu certificado. Você está marcando seu aplicativo com suas credenciais. Você pode marcar vários aplicativos com a mesma chave; de ​​fato, é recomendável usar um certificado para marcar vários aplicativos que você escreve. É mais fácil acompanhar quais aplicativos pertencem a você.

Não sei ao certo o que você quer dizer com implicações. Suponho que isso signifique que ninguém, exceto o titular do seu certificado, possa atualizar seu aplicativo. Isso significa que, se você o liberar, perder o certificado usado para assinar o aplicativo, não poderá liberar atualizações; portanto, mantenha esse certificado seguro e com backup, se necessário.

Mas, além de assinar os aplicativos para liberá-los, você pode usá-lo para autenticar seu dispositivo em um servidor via SSL, se desejar, (também relacionado ao Android), entre outras funções.

Otra
fonte
2
Resposta muito boa. Também é necessário observar aqui que você precisa de um arquivo de armazenamento de chaves se usar "push data" em seu aplicativo!
KapteinMarshall
A máquina do Keystore é específica? Ou podemos usá-lo em qualquer máquina para atualizar nosso aplicativo?
Yawar
7
Boa explicação. Você também pode explicar por que exigimos KeyStorePassword, Key alias, KeyPassword. Parece redundante ter três chaves.
ARK
18

O Android Market exige que você assine todos os aplicativos publicados com um certificado, usando um mecanismo de chave pública / privada (o certificado é assinado com sua chave privada). Isso fornece uma camada de segurança que impede, entre outras coisas, que atacantes remotos enviem atualizações maliciosas ao seu aplicativo para o mercado (todas as atualizações devem ser assinadas com a mesma chave).

No Guia de assinatura de aplicativos do site do desenvolvedor do Android:

Em geral, a estratégia recomendada para todos os desenvolvedores é assinar todos os seus aplicativos com o mesmo certificado, durante toda a vida útil esperada dos seus aplicativos. Existem várias razões pelas quais você deve fazê-lo ...

Usar a mesma chave tem alguns benefícios - Uma é que é mais fácil compartilhar dados entre aplicativos assinados com a mesma chave. Outra é que ele permite que vários aplicativos assinados com a mesma chave sejam executados no mesmo processo, para que um desenvolvedor possa criar aplicativos mais "modulares".

Alexander Lucas
fonte
10

Você pode encontrar mais informações sobre o processo de assinatura na documentação oficial do Android aqui: http://developer.android.com/guide/publishing/app-signing.html

Sim, você pode assinar vários aplicativos com o mesmo keystore. Mas você deve se lembrar de uma coisa importante: se você publicar um aplicativo na Play Store, precisará assiná-lo com um certificado sem depuração. E se um dia você quiser publicar uma atualização para este aplicativo, o keystore usado para assinar o apk deve ser o mesmo. Caso contrário, você não poderá postar sua atualização.

Raphaël Titol
fonte
Não, isso está errado. O keystore usado para assinar o apk pode ser diferente, mas a chave usada para assinar o apk deve ser a mesma. O arquivo de armazenamento de chaves, apenas um arquivo usado para armazenar as informações de chave e certificado, você pode ter várias entidades de chave no mesmo arquivo de armazenamento de chaves.
zeleven 27/01
0

Toda a ideia de uma ferramenta de chave é assinar seu apk com um identificador exclusivo, indicando a origem desse apk. Um arquivo keystore (pelo que entendi) é usado para depuração, para que seu apk tenha a funcionalidade de um keytool sem assinar seu apk para produção. Então, sim, para fins de depuração, você deve assinar vários apks com um único keystore. Mas entenda que, ao avançar para a produção, você precisará de ferramentas exclusivas como identificadores para cada apk criado.

Adam Storm
fonte
Você não precisa assinar um aplicativo para depurá-lo, no emulador ou em um dispositivo real.
Marcus
Eu não quis dizer que você precisa assiná-lo para depurá-lo ... mas você pode usar o keystore como uma implementação de teste do seu keytool.
Adam Storm
Eu não acho keytoolque é isso que você quer dizer. keytool é um programa java usado para gerar keystores.
Otra 27/07
sim, você está certo, keytool não é o que eu quero dizer. Eu acho que 'chave' é o que eu quero dizer. Eu estava apenas tentando explicar ao solicitante que você pode ter uma chave apk comum para depuração, mas após a publicação, cada apk precisará ter chaves únicas para edição e atualização.
27611 Adam Storm
Porém, eles não precisam de chaves únicas ... você pode assinar vários apks com uma chave privada, é preferível que você o faça. Você pode imaginar acompanhar 10 chaves / chaves diferentes para 10 aplicativos?
Otra 27/07