GitLab unterstützt seit einer Weile signierte Commits mit GNU Privacy Guard (GPG). In diesem Artikel beschreibe ich die Schritte zum Einrichten eines GPG-Schlüssels und, wie ich diesen zum Signieren meiner Commits verwende.
Update Sept. 2020: Kapitel zum Hinterlegen des GPG-Schlüssels im GitHub-Konto hinzugefügt.
GPG-Schlüssel konfigurieren
Neuen GPG-Schlüssel erstellen
Falls kein passender GPG-Schlüssel vorhanden ist kann mit gpg
einfach ein neues Schlüsselpaar erstellt werden:
gpg --full-gen-key
Beim Erstellen des Schlüssels ist es wichtig, dieselbe E-Mail-Adresse anzugeben, die auch beim GitLab-Konto hinterlegt ist.
Bestehenden GPG-Schlüssel erweitern
Wenn ein vorhandener GPG-Schlüssel verwendet werden soll muss die im GitLab-Konto hinterlegte E-Mail-Adresse mit als “User-ID” beim Schlüssel hinzugefügt werden.
Dazu alle Schlüssel auflisten…
gpg --list-secret-keys --keyid-format LONG
… und die ID des Gewünschten notieren. Die Ausgabe kann mehrere private Schlüssel enthalten. Im folgenden Beispiel steht ID 352422B00B179048
des Schlüssels in der Zeile mit sec
:
sec rsa4096/352422B00B179048 2014-08-23 [SC] [verfällt: 2017-08-23]
B47F9BA26DEE50629620DB72352422B00B179048
uid [ ultimativ ] Thomas Hartl <thomas.hartl@soltari.at>
ssb rsa4096/8DE66AE00599CC0D 2014-08-23 [E] [verfällt: 2017-08-23]
Mit dieser Information kann der Schlüssel um die “User-ID” erweitert werden:
gpg --edit-key 352422B00B179048
gpg> adduid
[... den Anweisungen des Assistenten folgen ...]
gpg> save
Öffentlichen GPG-Schlüssel im hinterlegen
GPG-Schlüssel exportieren
Der öffentliche GPG-Schlüssel (Public Key) muss nun exportiert und anschließend im GitLab-Konto hinterlegt werden. Dazu den Public Key anzeigen und inklusive der Zeilen -----BEGIN PGP PUBLIC KEY BLOCK-----
und -----END PGP PUBLIC KEY BLOCK-----
kopieren:
gpg --armor --export 352422B00B179048
Im GitLab-Konto hinterlegen
Den Public Key in den GitLab-Benutzereinstellungen unter “GPG Keys” hinzufügen:
Im GitHub-Konto hinterlegen
In GitHub kann der Schlüssel unter Settings
> SSH and GPG keys
hinzugefügt werden.
GPG-Schlüssel in Git konfigurieren
Der folgende Befehl weist Git an, den GPG-Schlüssel mit ID 352422B00B179048
zum Signieren zu verwenden:
git config --global user.signingkey 352422B00B179048
Commits signieren
Um Commits tatsächlich zu signieren gibt es zwei Möglichkeiten:
Entweder einzelne Commits mit dem Parameter -S
signieren:
git commit -S -m "Dies ist ein signierter Commit."
Oder die Git-Option commit.gpgsign
setzen, um alle Commits standardmäßig zu signieren:
git config --global commit.gpgsign true
Quellen
- Git-SCM: Signing Your Work
- GitLab: Sign commits with GPG
- GitHub: Adding a GPG key to your GitHub account