Git und GPG einrichten, um Commits kryptographisch zu signieren.
aktualisiert am

Git Commits mit GPG signieren


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:

GitLab GPG keys

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