Git Commits signieren - Extra Sicherheit für die Versionsverwaltung
Ich habe vor einiger Zeit angefangen jeden Git Commit zu signieren. Die Anregung dafür kam von einem Kollegen und dafür ein Dankeschön an Frank open_in_new. Für alle die nicht wissen worum es geht, ein Git Commit kann signiert werden, so wie auch Emails und andere Inhalte signiert werden können. Damit wird nachgewiesen dass ein Commit auch wirklich von der angegebenen Person stammt. Dieser Bonus an Vertrauen ist vor allem in Repositories mit vielen aktiven Nutzern hilfreich, aber auch in kleinen Repositories oder privaten Projekten gibt er ein zusätzlich Stück extra Sicherheit.
Um seine Commits zu signieren sind folgende Schritte nötig, außerdem muss man vielleicht noch das eine oder andere kleine plattformspezifische Problem aus der Welt schaffen.
- Installiert die benötigte Software
- Linux: Alles nötige sollte vorhanden sein
- Windows: Gpg4win open_in_new
- Mac OS: GPG Suite open_in_new
- Erstellt einen neuen Key (RSA 4096 wäre ein Vorschlag für die Sicherheitseinstellungen)
gpg --full-generate-key
- Lasst euch alle vorhandenen Keys anzeigen
gpg --list-keys
- In der Ausgabe seht ihr hinter dem Eintrag pub das Datum, die Art des Keys (z.B. rsa4096) und einen Hash. Der Hash muss nun im Befehl
git config --global user.signingkey KEY_HASH
eingesetzt werden. Auf diesem Weg setzt ihr den Key global für alle Repositories.
git config --global user.signingkey ABCDEF0123456
- Einen Commit könnt ihr via
git commit –S
signieren, ein Tag viagit tag –s
- Solltet ihr so wie ich alle Aktionen (in allen Repositories) signieren wollen, was entsprechend für häufige Passwort abfragen sorgt, nutzt den folgenden Befehl. Ein spezifisches Repository hingegen kann via
git config commit.gpgsign true
konfiguriert werden.
git config --global commit.gpgsign true
- Damit Dienste wie Github den Key erfolgreich verifizieren können, müsst ihr den jeweiligen Public-Teil des Keys den Diensten mitteilen. Bei Github geht dies z.B. über diesen Link open_in_new.
Windows Probleme beheben:
- Solltet ihr die Fehlermeldung “secret key not available” erhalten, prüft via
git config --global gpg.program
ob der richtige Pfad zu eurem GPG Tool gesetzt ist (via walialu.com open_in_new). Mittels des folgenden Befehles konnte ich den Fehler bei mir beheben.
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
- Beim Verwalten eurer Keys und der dazugehörigen Config Einstellungen kann eine GUI hilfreich sein. Ich nutze GPA (GNU Privacy Assistant), welche in Gpg4win enthalten ist.