GitSign : signer vos commits Git avec Sigstore
Mise à jour :
Vous contribuez à un projet open source. Un jour, quelqu’un pousse un commit
malveillant en utilisant votre adresse email dans git config. Sans signature,
impossible de prouver que ce n’était pas vous.
GitSign résout ce problème avec la signature keyless : vous signez vos commits avec votre identité (compte GitHub, Google, Microsoft) au lieu d’une clé GPG à gérer. Le tout est enregistré dans un log de transparence public pour garantir l’auditabilité.
Qu’est-ce que GitSign ?
GitSign est un outil développé par le projet Sigstore qui permet de signer vos commits Git sans gérer de clés cryptographiques.
Comment ça fonctionne :
- Vous faites un commit
- GitSign ouvre un navigateur pour vous authentifier (GitHub, Google, etc.)
- Fulcio délivre un certificat éphémère (valable 10 minutes)
- Votre commit est signé avec ce certificat
- La signature est enregistrée dans Rekor, le log de transparence public
Le certificat expire rapidement, mais la signature reste vérifiable grâce à
Rekor qui prouve qu’elle a été créée pendant la période de validité.
Pour comprendre en détail le fonctionnement de la signature keyless, consultez le guide Sigstore.
Pourquoi signer ses commits ?
La signature de commits répond à un problème fondamental : Git ne vérifie pas
l’identité de l’auteur. N’importe qui peut configurer git config user.email
avec votre adresse et pousser des commits en votre nom.
| Sans signature | Avec signature |
|---|---|
| N’importe qui peut usurper votre email | Identité vérifiée cryptographiquement |
| Compromission de compte → commits frauduleux | Signature invalide sans votre authentification |
| Aucune preuve d’intégrité | Modification du commit = signature cassée |
| Historique falsifiable | Chaîne de confiance auditable |
Prérequis
Avant de commencer, assurez-vous d’avoir :
- Git 2.34+ (pour le support du format de signature x509)
- Un compte OIDC : GitHub, Google, ou Microsoft
- Connexion Internet (nécessaire pour l’authentification et Rekor)
Pour vérifier votre version de Git :
git --version# Doit afficher 2.34 ou supérieurGitSign vs GPG vs SSH
Trois méthodes existent pour signer vos commits. Voici comment choisir :
| Critère | GPG | SSH (Git 2.34+) | GitSign |
|---|---|---|---|
| Gestion de clés | Clé longue durée à protéger | Clé SSH existante | Aucune (OIDC) |
| Rotation | Manuelle, complexe | Manuelle | Automatique (certificat éphémère) |
| Vérification | Web of trust ou clé uploadée | Clé uploadée sur forge | Log de transparence Rekor |
| Badge “Verified” | ✅ GitHub/GitLab natif | ✅ GitHub/GitLab natif | ❌ Vérification CI requise |
| Air-gapped | ✅ Compatible | ✅ Compatible | ❌ Internet requis |
| Auditabilité | Limitée | Limitée | Totale (Rekor public) |
Installation
# Avec Homebrewbrew install sigstore/tap/GitSign
# Vérifier l'installationGitSign version# Télécharger la dernière versionGitSign_VERSION=$(curl -s https://api.github.com/repos/sigstore/GitSign/releases/latest | grep tag_name | cut -d '"' -f 4)curl -LO "https://github.com/sigstore/GitSign/releases/download/${GitSign_VERSION}/GitSign_${GitSign_VERSION#v}_linux_amd64"
# Installerchmod +x GitSign_*_linux_amd64sudo mv GitSign_*_linux_amd64 /usr/local/bin/GitSign
# Vérifier l'installationGitSign versionVérification attendue : La commande affiche la version installée (ex:
GitSign version v0.10.2).
# Depuis les dépôts communautairespacman -S GitSign
# Vérifier l'installationGitSign version# Avec Scoopscoop bucket add sigstore https://github.com/sigstore/scoop-bucketscoop install GitSign
# Vérifier l'installationGitSign versionConfiguration
Vous pouvez configurer GitSign globalement (tous vos projets) ou par projet.
Configuration globale (recommandée pour démarrer)
Ces commandes configurent Git pour utiliser GitSign sur tous vos dépôts :
# Activer la signature automatique des commitsgit config --global commit.gpgsign true
# Indiquer à Git d'utiliser le format x509 (requis pour GitSign)git config --global gpg.format x509
# Spécifier GitSign comme programme de signaturegit config --global gpg.x509.program GitSignPourquoi ces trois lignes ?
commit.gpgsign true: Git signera automatiquement chaque commitgpg.format x509: utilise des certificats X.509 au lieu de GPGgpg.x509.program GitSign: délègue la signature à GitSign
Configuration par projet
Si vous ne voulez utiliser GitSign que sur certains projets :
# Dans le répertoire du projetcd mon-projet
git config --local commit.gpgsign truegit config --local gpg.format x509git config --local gpg.x509.program GitSignVérifier la configuration
git config --list | grep -E "(commit.gpgsign|gpg.format|gpg.x509)"Sortie attendue :
commit.gpgsign=truegpg.format=x509gpg.x509.program=GitSignPremier commit signé
C’est le moment de tester ! Voici ce qui va se passer lors de votre premier commit signé.
-
Créer ou modifier un fichier
Terminal window echo "# Mon projet" > README.mdgit add README.md -
Faire un commit
Terminal window git commit -m "feat: initialisation du projet"Comme
commit.gpgsignest activé, Git appelle automatiquement GitSign. -
S’authentifier via OIDC
Un navigateur s’ouvre avec une page Sigstore. Choisissez votre provider (GitHub, Google, Microsoft) et connectez-vous.
-
Vérifier la signature
Terminal window git log --show-signature -1Sortie attendue :
commit abc123... (HEAD -> main)tlog index: 12345678GitSign: Signature made using certificate ID 0xabc...GitSign: Good signature from "votre-email@example.com"
Vérification des signatures
Vérifier en ligne de commande
# Vérifier le dernier commitGitSign verify HEAD
# Vérifier une plage de commitsGitSign verify HEAD~5..HEAD
# Vérifier avec plus de détailsGitSign verify --verbose HEADSortie d’une vérification réussie :
tlog index: 12345678GitSign: Signature verified OKGitSign: Certificate subject: votre-email@example.comGitSign: Certificate issuer: https://github.com/login/oauthVérifier l’entrée dans Rekor
Chaque signature est enregistrée dans le log de transparence public. Pour retrouver une entrée :
# Rechercher par emailrekor-cli search --email votre@email.com
# Voir les détails d'une entréerekor-cli get --uuid <entry-uuid>Vous pouvez aussi explorer Rekor via l’interface web : search.sigstore.dev ↗
Intégration GitHub
GitHub ne reconnaît pas encore nativement les signatures GitSign. Vos commits n’auront pas le badge “Verified” automatiquement.
Solutions :
- Vérification CI : ajoutez un job qui vérifie les signatures (voir section GitHub Actions)
- Documentation : indiquez dans votre README que les commits sont vérifiables
via
GitSign verify
Intégration GitLab
Même situation que GitHub. Créez un job CI pour la vérification :
verify-signatures: image: ghcr.io/sigstore/GitSign:latest script: - GitSign verify $CI_COMMIT_SHA rules: - if: $CI_PIPELINE_SOURCE == "push"Configuration avancée
Choisir le provider OIDC
Par défaut, GitSign propose tous les providers. Pour forcer un provider spécifique :
# Utiliser GitHub uniquementexport GitSign_CONNECTOR_ID=https://github.com/login/oauth
# Utiliser Google uniquementexport GitSign_CONNECTOR_ID=https://accounts.google.com
# Utiliser Microsoft (Azure AD)export GitSign_CONNECTOR_ID=https://login.microsoftonline.comPour rendre permanent, ajoutez à votre ~/.bashrc ou ~/.zshrc.
Signer des tags
GitSign fonctionne aussi pour les tags annotés :
# Créer un tag signégit tag -s v1.0.0 -m "Release 1.0.0"
# Vérifier le tagGitSign verify v1.0.0Mode non-interactif (CI/CD)
Dans un pipeline CI, il n’y a pas de navigateur pour l’authentification OIDC. Utilisez un token OIDC fourni par la plateforme.
GitHub Actions :
name: Signed Commits
on: [push]
jobs: verify: runs-on: ubuntu-24.04 permissions: id-token: write # Nécessaire pour obtenir un token OIDC contents: read steps: - uses: actions/checkout@v4 with: fetch-depth: 0 # Historique complet pour vérification
- name: Install GitSign run: | GitSign_VERSION=$(curl -s https://api.github.com/repos/sigstore/GitSign/releases/latest | grep tag_name | cut -d '"' -f 4) curl -LO "https://github.com/sigstore/GitSign/releases/download/${GitSign_VERSION}/GitSign_${GitSign_VERSION#v}_linux_amd64" chmod +x GitSign_*_linux_amd64 sudo mv GitSign_*_linux_amd64 /usr/local/bin/GitSign
- name: Verify commit signatures run: GitSign verify HEADGitLab CI avec OIDC :
verify-signatures: image: ubuntu:latest id_tokens: SIGSTORE_ID_TOKEN: aud: sigstore script: - | GitSign_VERSION=$(curl -s https://api.github.com/repos/sigstore/GitSign/releases/latest | grep tag_name | cut -d '"' -f 4) curl -LO "https://github.com/sigstore/GitSign/releases/download/${GitSign_VERSION}/GitSign_${GitSign_VERSION#v}_linux_amd64" chmod +x GitSign_*_linux_amd64 && mv GitSign_*_linux_amd64 /usr/local/bin/GitSign - GitSign verify $CI_COMMIT_SHASécurité et vie privée
Ce qui est public
Ce qui est protégé
- Votre clé privée n’existe pas : le certificat est éphémère
- Vos credentials OIDC ne sont jamais stockés par GitSign
- La signature prouve l’authenticité au moment de la création
Bonnes pratiques
| Pratique | Pourquoi |
|---|---|
| Utilisez un compte dédié au code | Sépare identité pro/perso |
| Activez 2FA sur le provider OIDC | Protège contre le vol de compte |
| Vérifiez les signatures en CI | Détecte les commits non signés |
| Documentez votre politique | Les contributeurs savent quoi faire |
Dépannage
Problèmes courants
| Symptôme | Cause probable | Solution |
|---|---|---|
| Navigateur ne s’ouvre pas | xdg-open manquant ou WSL | Installer xdg-utils ou configurer BROWSER |
error: gpg failed to sign | Format x509 non configuré | Vérifier git config gpg.format |
certificate has expired | Commit après expiration du cert | Refaire le commit (certificat = 10 min) |
could not find tlog entry | Problème réseau avec Rekor | Vérifier connexion Internet |
unsupported signature type | Git < 2.34 | Mettre à jour Git |
Logs de débogage
Pour voir ce que fait GitSign en détail :
export GitSign_LOG=debuggit commit -m "test"Réinitialiser la configuration
Si vous voulez revenir à GPG ou désactiver la signature :
# Désactiver la signature automatiquegit config --global --unset commit.gpgsign
# Revenir au format GPGgit config --global gpg.format openpgpgit config --global --unset gpg.x509.programLimites connues
| Limitation | Détail | Alternative |
|---|---|---|
| Internet requis | Fulcio + Rekor nécessaires | GPG/SSH pour air-gapped |
| Pas de badge GitHub | Vérification manuelle | Job CI + badge personnalisé |
| Email public | Visible dans Rekor | GPG avec pseudonyme |
| Certificat court | 10 minutes de validité | Pas de problème si commit immédiat |
À retenir
- GitSign = signature keyless : votre identité OIDC remplace les clés GPG
- Certificat éphémère : valide ~10 minutes, mais signature vérifiable indéfiniment grâce à Rekor
- Transparence totale : toutes les signatures sont dans un log public
- Vérification CI : pas de badge GitHub natif, mais vérifiable par
GitSign verify - Email public : attention si anonymat requis
Liens utiles
Ressources externes
- GitSign sur GitHub ↗ — Code source et documentation officielle
- Documentation Sigstore ↗ — Guide complet de l’écosystème
- Rekor Search ↗ — Explorer le log de transparence public
- Sigstore blog ↗ — Annonces et cas d’usage