Comprendre le keystore, les certificats et les alias

95

Le fichier de clés est-il le certificat réel ou l'alias est-il le certificat?

Si j'utilise un autre alias pour signer mon application, est-ce que cela va gâcher les mises à jour sur le marché? Ou aurais-je besoin de signer mon application avec un magasin de clés différent pour gâcher les choses? Et d'où les informations sous l'alias sont-elles visibles?

Roger
la source

Réponses:

127

Le fichier keystore généré par Keytool stocke des paires de clés privées et publiques. Chaque paire ou entrée stockée dans le keystore est référencée par un alias unique. En bref:

Entrée du magasin de clés = paire de clés privée + publique = identifiée par un alias

Le fichier de clés protège chaque clé privée avec son mot de passe individuel et protège également l'intégrité de l'ensemble du fichier de clés avec un mot de passe (éventuellement différent).

Par exemple, lorsque vous signez une application Android à l'aide de l'option Exporter le package d'application signé de l'outil Eclipse Android, vous êtes invité à sélectionner d'abord un fichier de clés, puis à sélectionner un seul alias / entrée / paire à partir de ce fichier de clés. Après avoir fourni les mots de passe du fichier de clés et de l'alias choisi, l'application est signée et la clé publique (le certificat) de cet alias est intégrée dans l'APK.

Maintenant, pour répondre à votre question, vous ne pouvez publier une mise à jour que pour une application qui a été signée avec l'alias «foo» en signant à nouveau la mise à jour avec le même alias. La perte du keystore dans lequel votre alias est stocké vous empêcherait de publier une version mise à jour de votre application.

Il existe cependant un moyen de signer une application avec un nouvel alias, mais cela implique le clonage d'un alias existant dans le keystore à l'aide de keytool -keyclone :

Crée une nouvelle entrée de keystore, qui a la même clé privée et la même chaîne de certificats que l'entrée d'origine.

L'entrée d'origine est identifiée par un alias (qui par défaut est "mykey" s'il n'est pas fourni). La nouvelle entrée (de destination) est identifiée par dest_alias. Si aucun alias de destination n'est fourni sur la ligne de commande, l'utilisateur est invité à le saisir.

Si le mot de passe de la clé privée est différent du mot de passe du fichier de clés, l'entrée ne sera clonée que si un clavier valide est fourni. Il s'agit du mot de passe utilisé pour protéger la clé privée associée à l'alias. Si aucun mot de passe de clé n'est fourni sur la ligne de commande et que le mot de passe de clé privée est différent du mot de passe du fichier de clés, l'utilisateur est invité à le saisir. La clé privée dans l'entrée clonée peut être protégée avec un mot de passe différent, si vous le souhaitez. Si aucune option -new n'est fournie sur la ligne de commande, l'utilisateur est invité à entrer le mot de passe de la nouvelle entrée (et peut choisir de le laisser être le même que pour la clé privée de l'entrée clonée).

Plus d'information:

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

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

Julio Gorgé
la source
3
Le site de développement suggère d'utiliser le même certificat pour toutes vos applications. Cela signifie-t-il que tant que j'utilise le même keystore, je peux utiliser n'importe quel alias avec n'importe quel mot de passe et cela ne gâchera pas les mises à jour, car ce n'est qu'une référence? Le keystore réel est la partie importante?
Roger
1
J'ai réécrit ma réponse pour être plus précise. Bref, vous devez en effet utiliser le même alias pour signer toutes les mises à jour de votre application.
Julio Gorgé
2
@Julio La meilleure pratique serait donc d'utiliser le même alias pour toutes les différentes applications que vous souhaitez publier, comme le suggère le site de développement? Je ne vois aucune raison de créer un alias distinct pour toutes vos applications.
Tony Chan
@ JulioGorgé-Hey, je voulais juste savoir que R alias-name sensible à la casse .. ??
Nom est Nilay
@ JulioGorgé voulez-vous dire le même alias ou la même clé. L'alias n'est qu'un nom, je peux renommer l'alias. Vous pouvez publier une mise à jour aussi longtemps que les clés (les clés publiques pour être spécifiques) dans l'application correspondent.
Dheeraj Bhaskar le