Aller au contenu

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

  1. Documenter la procédure (ce tutoriel)
  2. Aider chaque développeur a configurer sa clé
  3. Activer la vérification sur la forge (badge "Verified")
  4. 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