Comprendre le fichier de clés, les certificates et les alias

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

Si j’utilise un autre alias pour signer mon application, cela gâchera-t-il les mises à jour sur le marché? Ou aurais-je besoin de signer mon application avec un fichier de clés différent pour bousiller les choses? Et d’où les informations sont-elles accessibles sous alias?

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

Entrée de fichier 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 devez d’abord sélectionner un fichier de clés, puis demander à sélectionner un seul alias / entrée / paire dans ce magasin 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 certificate) de cet alias est intégrée à l’APK.

Maintenant, pour répondre à votre question, vous ne pouvez publier une mise à jour que pour une application signée avec l’alias ‘foo’ en signant à nouveau la mise à jour avec le même alias. Perdre le fichier de clés où votre alias est stocké vous empêcherait de publier une version mise à jour de votre application.

Il existe toutefois un moyen de signer une application avec un nouvel alias, mais cela implique le clonage d’un alias existant dans le magasin de clés à l’aide de keytool -keyclone :

Crée une nouvelle entrée de fichier de clés qui possède la même clé privée et la même chaîne de certificates que l’entrée d’origine.

L’entrée d’origine est identifiée par un alias (par défaut “mykey” si elle n’est pas fournie). 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 fournir.

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. C’est le 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 la 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 de 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é à saisir 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