Warum signieren
Git's Autor- und Committer-Felder sind unauthentifizierte Metadaten.
Drei Signierungs-Backends
- GPG.
- SSH (Git 2.34+).
- X.509 / S/MIME.
SSH-Signierung (empfohlen)
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
echo "[email protected] $(cat ~/.ssh/id_ed25519.pub)" \
>> ~/.config/git/allowed_signers
git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
GPG-Signierung
gpg --full-generate-key
gpg --list-secret-keys --keyid-format=long
git config --global user.signingkey 3AA5C34371567BD2
git config --global commit.gpgsign true
gpg --armor --export 3AA5C34371567BD2
Bestehende Commits signieren
git commit --amend --no-edit -S
git rebase -i <base> --exec 'git commit --amend --no-edit -S'
Signaturen verifizieren
git log --show-signature
git verify-commit HEAD
git verify-tag v1.4.0
Signierte Tags fur Releases
git tag -s v1.4.0 -m "Release 1.4.0"
git tag -v v1.4.0
Schlussel-Hygiene
- ed25519-Schlussel verwenden.
- Mit Passphrase und Agent schutzen.
- Jahrlich rotieren.
- Schlussel auf Hardware speichern.