💾 Archived View for thasmanie.fr › git-gpg.gmi captured on 2023-09-08 at 15:49:29. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-11-30)
-=-=-=-=-=-=-
2021-11-27
Il est possible de renforcer un peu la sécurité d'un projet git en demandant aux contributeurs de signer leurs commits git. On peut le faire avec gpg (= gnupg, l'implémentation du standard pgp).
Et tant qu'à faire, on va aussi voir comment s'authentifier au repo git distant via https et un token, le tout stocké dans un fichier chiffré avec gpg aussi.
Je donne les principes généraux, et des liens avec les docs et exemples détaillés.
Il faut générer une clé pgp, puis la configurer dans git.
$ gpg --full-generate-key $ gpg --list-secret-keys --keyid-format LONG <your_email>
on récupère ce qui est après `sec rsa4096/` (par exemple)
$ git config --global user.signingkey <id qu'on vient de récup> $ git config --global commit.gpgsign true
Ensuite il ne reste qu'Ă l'ajouter Ă son compte via l'interface web (gitea, gitlab, github, ...).
On aura alors de beaux encadrés verts "Verified" qui apparaissent.
La doc de gitlab est bien faite.
https://docs.gitlab.com/ee/user/project/repository/gpg_signed_commits/
Si on utilise https plutĂ´t que ssh pour la branche remote d'un repo git, on peut stocker ses identifiants (son Personal access token de gitlab par exemple) dans ~/.netrc, et pour Ă©viter que ce dernier soit en clair sur le disque, on peut le chiffrer.
Attention, tous les programmes qui utilisent .netrc ne sont pas compatibles avec ce chiffrement pgp.
Ce fichier se présente comme ceci :
$ cat ~/.netrc machine git.toto.fr login monuser password tokenOuMotDePasseEnClair protocol https
On va donc le chiffrer (on peut utiliser sa clé créée plus ci-dessus) :
$ gpg --encrypt --recipient thasos@thasmanie.fr ~/.netrc
On peut maintenant supprimer l'ancien (sauf si vous l'utilisez pour d'autres programmes !) :
$ rm ~/.netrc $ ls -l ~/.netrc* -rw-r--r-- 1 thasos thasos 559 27 nov. 20:24 /home/thasos/.netrc.gpg
On va maintenant configurer git et installer le helper dédié (car hélas pas installé de base) :
$ git clone https://github.com/git/git.git $ cd git/contrib/credential/netrc $ make $ sudo cp git-credential-netrc /usr/local/bin $ git config --global credential.helper netrc
Et voilà , maintenant on voit un beau message "gpg: chiffré avec une clef..." à chaque pull, push etc… et on ne rentre son mot de passe que pour charger la clé pgp.
Si on a une erreur "Inappropriate ioctl for device" (ou "Ioctl() inapproprié pour un périphérique"), il suffit d'ajouter une variable d'env :
echo "export GPG_TTY=$(tty)" >> ~/.bashrc
La doc qui m'a tout appris :
https://andrearichiardi.com/blog/posts/git-credential-netrc.html
Si on veut configurer la durée du timeout pour entrer le mot de passe de la clé pgp (quand je lis la doc, je pense qu'il faut les 2, mais j'ai pas testé...) :
cat ~/.gnupg/gpg-agent.conf default-cache-ttl 14400 max-cache-ttl 14400