Je trouve très peu de conseil ou bonnes pratiques. Développeurs Android qui avez de l’expérience là dedans, j’ai besoin de vos lumières.
Pour l’instant j’ai lu Signing you applications. J’ai retenu que toutes les applications doivent être signées, et que pour pouvoir les mettre à jour il faut utiliser exactement le même certificat que l’application d’origine. Pour signer on créé un keystore et un alias.
Une ou plusieurs clefs
La bonne pratique habituelle côté sécurité c’est une clef par destination, application ou usage. Éventuellement une clef globale pour certifier les premières si on a besoin de s’assurer de la paternité de toutes les clefs. Ça militerait pour signer chaque application avec une clef différente et ça permettrait de déléguer la production d’une ou plusieurs applications à un tiers sans devoir lui donner la clef globale.
Le problème c’est que le document sur la doc Android, ainsi que les quelques documents trouvés sur le web à propos de Google Play, conseillent plutôt d’utiliser une clef globale. Le seul gain que j’y vois c’est que les applications pourront communiquer entre elles. Je n’en ai pas besoin pour l’instant mais il est vrai que je ne connais pas le futur.
Alors, une clef par application ou une clef globale ?
Notion de keystore et alias
Tel que je le comprends le keystore n’est qu’un simple entrepôt pour stocker des clefs. Mis à part que lui même peut être protégé par un mot de passe pour éviter de donner trop facilement accès aux clefs privées. Les clefs privés sont en fait ce qui est pointé par les « alias » dans la documentation. On peut donc avoir plusieurs clefs par keystore.
J’en déduis que la notion de keystore n’influe pas du tout sur Google Play. Je peux sortir ma clef d’un keystore, la mettre dans un autre keystore et signer une mise à jour avec. Tant que c’est la même clef, on se moque du keystore. Ai-je bon ?
J’en déduis donc aussi que Google n’a aucune notion de mon keystore et que je peux y ajouter de nouvelles clefs quand je le souhaite pour de nouvelles applications. Je n’ai pas besoin de préparer un keystore avec un jeu de clef qui ne bougera pas et que je ne pourrai pas mettre à jour. Ai-je bon ?
Voilà voilà, j’ai besoin de vos lumières et ayant peu d’éditeurs d’applications dans mon réseau, j’apprécierai beaucoup que vous fassiez suivre mes interrogations à vos propres connaissances.
Comme j’ai eu quelques conseils de gens qui réfléchissent à haute voix mais n’ont eux-même pas essayé ou pas d’expérience dans tout ça : Si vous vous retrouvez dans cette situation, merci de le préciser pour que je fasse le tri entre les retours d’expérience réels et les autres.
2 réponses à “Signature des applications Android sur Google Play”
C’est ça, le keystore n’est, comme son nom l’indique, qu’un endroit pour stocker les clés. Il n’apporte notamment aucune notion de sous-clé comme dans PGP.
Ton application devra être signée par la même clé privée lors d’une mise à jour, sinon elle sera refusée par Google Play, et surtout refusée sur le mobile (il faut passer par une phase de désinstallation/réinstallation, bien connue par les développeurs dans les projets collaboratifs où tous les développeurs n’ont pas accès à la clé privée utilisée sur Google Play).
Signer toutes ses applications avec la même clé est une solution de facilité pour le développeur. Maintenant, en cas de compromission de la clé, ce sont autant d’applications qu’il faudra republier sous une autre identité, car on ne pourra plus avoir confiance en cette clé. D’un autre côté, en pratique, des clés multiples seront souvent stockées dans le même keystore et protégées par le même mot de passe : une compromission touchera donc facilement l’ensemble de ces clés.
Notons également qu’il est possible de faire communiquer des applications signées avec des clés différentes de manière privilégiée, en utilisant des permissions dédiées.
Un gros merci