Signature et confiance¶
Signer ses commits pour garantir l'authenticite et établir une chaîne de confiance.
Pourquoi signer¶
Un commit Git n'est qu'un fichier texte avec un nom et un email. N'importe qui peut committer sous votre identité :
git -c user.name="Linus Torvalds" -c user.email="torvalds@linux-foundation.org" commit -m "definitely me"
La signature cryptographique résout ce problème : elle prouve que le commit a bien été créé par le detenteur de la clé privee associee.
graph LR
A["Developpeur"] -->|"signe avec cle privee"| B["Commit signe"]
B -->|"pousse"| C["Forge (GitHub/GitLab/Gitea)"]
C -->|"verifie avec cle publique"| D["Badge Verified"] GPG — la méthode classique¶
Générer une clé GPG¶
# Generer une paire de cles
gpg --full-generate-key
# Choisir : RSA and RSA, 4096 bits, expiration 1-2 ans
# Lister les cles
gpg --list-secret-keys --keyid-format=long
# Exporter la cle publique (a ajouter sur la forge)
gpg --armor --export VOTRE_KEY_ID
Configurer Git¶
# Associer la cle a Git
git config --global user.signingkey VOTRE_KEY_ID
# Signer tous les commits par defaut
git config --global commit.gpgsign true
# Signer tous les tags par defaut
git config --global tag.gpgsign true
Vérifier un commit¶
# Verifier la signature d'un commit
git verify-commit HEAD
# Voir les signatures dans le log
git log --show-signature -5
SSH — la méthode simple¶
Depuis Git 2.34, vous pouvez signer avec votre clé SSH existante — pas besoin de GPG.
Configurer Git pour la signature SSH¶
# Utiliser SSH pour la signature
git config --global gpg.format ssh
# Specifier la cle SSH a utiliser
git config --global user.signingkey ~/.ssh/id_ed25519.pub
# Activer la signature automatique
git config --global commit.gpgsign true
Vérifier les signatures SSH¶
# Creer un fichier allowed_signers
echo "$(git config user.email) $(cat ~/.ssh/id_ed25519.pub)" > ~/.ssh/allowed_signers
# Configurer Git pour utiliser ce fichier
git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers
# Verifier
git verify-commit HEAD
SSH vs GPG
Si vous avez déjà une clé SSH pour pusher sur votre forge, la signature SSH est le chemin le plus court. Pas de gestionnaire de clés supplémentaire, pas d'expiration a gérer.
Gitsign — signature sans clé avec Sigstore¶
Gitsign utilisé Sigstore pour signer via un provider OIDC (GitHub, Google, Microsoft). Pas de clé a gérer — l'identité est votre compte.
Installation¶
# Via go install
go install github.com/sigstore/gitsign@latest
# Configurer Git
git config --global commit.gpgsign true
git config --global gpg.x509.program gitsign
git config --global gpg.format x509
Fonctionnement¶
graph LR
A["git commit"] --> B["Gitsign"]
B --> C["Authentification OIDC<br/>(navigateur)"]
C --> D["Sigstore Fulcio<br/>(certificat ephemere)"]
D --> E["Commit signe"]
E --> F["Sigstore Rekor<br/>(log de transparence)"] Quand utiliser Gitsign
Gitsign est idéal pour les projets open source ou les équipes qui ne veulent pas gérer de clés. En environnement airgap, preferez GPG ou SSH.
Politique d'équipe¶
Niveaux de rigueur¶
| Niveau | Politique | Adapté pour |
|---|---|---|
| Optionnel | Les développeurs signent s'ils veulent | Projets personnels |
| Encourage | Signature activee par défaut, non bloquante | Équipes moyennes |
| Obligatoire | Branch protection : require signed commits | Compliance, sécurité, open source |
Mise en place progressive¶
- Documenter la procédure (ce tutoriel)
- Aider chaque développeur a configurer sa clé
- Activer la vérification sur la forge (badge "Verified")
- Activer "require signed commits" sur la branche principale
Outils¶
| Outil | Description | Lien |
|---|---|---|
| GPG | Chiffrement et signature — standard historique | gnupg.org |
| SSH | Signature avec la clé SSH existante (Git 2.34+) | git-scm.com |
| Gitsign | Signature sans clé via Sigstore et OIDC | github.com/sigstore/gitsign |
| Sigstore | Infrastructure de signature open source | sigstore.dev |