Julien L : Deux problèmes avec password-store et GnuPG
dimanche 27 janvier 2019 à 18:42Pour gérer mes mots de passe, j’utilise l’excellent outil pass du projet password-store. Celui-ci utilise GnuPG pour chiffrer chaque mot de passe.
J’ai récemment changé de système d’exploitation (j’y reviendrai probablement en détails dans un prochain article) et je suis tombé sur deux problèmes avec ces deux outils. Comme j’ai mis un certain temps à trouver la cause et la solution à chacun de ces deux problèmes, je les partage ici si cela peut aider quelqu’un.
« Pas de clef secrète »
Le problème
Après avoir migré vers mon nouveau système d’exploitation et après avoir installé password-store, je demande un mot de passe et j’obtiens une erreur inquiétante :
$ pass showgpg: starting migration from earlier GnuPG versions gpg: porting secret keys from '/home/julien/.gnupg/secring.gpg' to gpg-agent gpg: migration succeeded gpg: échec du déchiffrement : Pas de clef secrète
Mon explication
En changement de système d’exploitation, je suis passé d’une version 1.x de GnuPG (version 1.4 ou 1.7) vers une version 2.x (version 2.2.12 exactement). Ma clé secrète a été automatiquement migrée. J’ai, pendant un long moment, pensé que le problème était lié à cette migration mais je pense qu’il n’en est rien.
L’erreur est en fait due au fait que gpg-agent, le démon lancé en arrière-plan par gpg pour gérer les clés secrètes, ne trouve pas de pinentry, ce petit utilitaire qui permet de taper le mot de passe associé à une clé secrète. Comme aucun mot de passe ne peut être saisi, le déchiffrement ne peut pas se faire.
Ma solution
J’ai d’abord installé un pinentry. Plusieurs sont disponibles mais j’ai choisi pinentry-gtk2 du projet GnuPG lui-même. La procédure dépend ici du système d’exploitation.
Ensuite, je me suis assuré que le pinentry installé soit bien trouvé par gpg-agent. Le chemin par défaut est indiqué dans la page de man de gpg-agent (man gpg-agent). Comme le chemin ne correspondait pas, j’ai configuré gpg-agent en créant un fichier ~/.gnupg/gpg-agent.conf avec le contenu suivant :
pinentry-program
Enfin, j’ai tué le démon gpg-agent afin qu’il soit relancé avec la nouvelle configuration :
$ killall gpg-agent
J’ai relancé la commande pass ci-dessus et la boîte de dialogue du pinentry est bien apparue pour me demander mon mot de passe de clé secrète. Après saisie, le mot de passe désiré a bien été déchiffré.
« No public key »
Le problème
Cette fois, c’est lorsque j’ai essayé d’ajouter un mot de passe que j’ai obtenu une erreur :
$ pass insertEnter password for : Retype password for : XXX : skipped: No public key gpg: [stdin]: encryption failed: No public key Password encryption aborted.
Mon explication
GnuPG ne retrouve pas la clé publique dont la référence est fournie par password-store. Cette référence se trouve dans le fichier ~/.password-store/.gpg-id. Dans mon cas, c’est l’alias de la clé (XXX
Ma solution
J’ai indiqué l’identifiant de la clé à password-store, au lieu de l’alias, afin d’éviter tout problème lié au codage de caractères.
Pour cela, j’ai d’abord listé les clés :
$ gpg --list-keys /home/julien/.gnupg/pubring.kbx ------------------------------- pub rsa2048 2013-08-23 [SC] 704B4670E3A941D56A1C57829AB0A8F0A73DDA4C uid [ inconnue] XXXsub rsa2048 2013-08-23 [E]
Puis j’ai remplacé le contenu du fichier ~/.password-store/.gpg-id par l’identifiant de la clé (704B4670E3A941D56A1C57829AB0A8F0A73DDA4C).
J’ai relancé la commande pass ci-dessous et tout a fonctionné.
Original post of Julien L.Votez pour ce billet sur Planet Libre.