Ce que vous accomplirez
Vous configurerez Git pour signer commits et tags en utilisant votre clé SSH existante, configurerez le fichier allowed-signers pour la vérification, et intégrerez avec GitHub ou GitLab.
Pourquoi la signature SSH
La signature SSH est arrivée dans Git 2.34. Elle réutilise la clé SSH que vous utilisez déjà pour pusher.
Étape 1 : confirmer la version Git
git --version
Étape 2 : confirmer qu'une clé SSH existe
ls -la ~/.ssh/id_ed25519*
ssh-keygen -t ed25519 -C "[email protected]"
Étape 3 : configurer Git pour signer avec SSH
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true
git config --global tag.gpgsign true
Étape 4 : tester
cd /tmp/sign-test
git init
echo "test" > file.txt
git add . && git commit -m "Test signed commit"
git log --show-signature -1
Étape 5 : configurer les signers autorisés
mkdir -p ~/.config/git
echo "[email protected] $(cat ~/.ssh/id_ed25519.pub)" \
>> ~/.config/git/allowed_signers
git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
Étape 6 : vérifier un commit
git verify-commit HEAD
git log --show-signature
git verify-tag v1.0.0
Étape 7 : uploader la clé sur votre host Git
Étape 8 : signer des commits anciens
git commit --amend --no-edit -S
git rebase -i <base> --exec 'git commit --amend --no-edit -S'
Étape 9 : forcer les commits signés
gh api -X PUT repos/owner/repo/branches/main/protection \
-F required_signatures.enabled=true
Étape 10 : gérer plusieurs machines
- Clé par machine.
- Une clé maître.
- Clé matérielle.
Signature appuyée par le matériel
ssh-keygen -t ed25519-sk -O resident -C "[email protected]"
Étape 11 : signer les tags
git tag -s v1.0.0 -m "Release 1.0.0"
git tag -v v1.0.0
Dépannage
- "gpg: skipped: No secret key" - GPG est encore configuré.
- "Bad signature" sur un commit d'autrui - sa clé n'est pas dans
allowed_signers. - Le host montre "Unverified" - clé publique non uploadée.