Git Commits signieren unter Windows

Möchte man seine Git Commits unter Windows mit einem gnupg Schlüssel signieren benötigt mann eben diesen. Windows bringt selbst keine Implementierung zum erstellen derartiger Schlüssel mit. Abhilfe kann da die Infrastruktur des Linux Subsystems für Windows schaffen. In diesem Fall verwende ich hier die Ubuntu Bash.

Im folgenden soll beschrieben werden welche Schritte nötig sind um einen neuen Schlüssel zu erstellen und diesen dann in den entsprechenden Werkzeugen zu verwenden.

Info: Dieser Beitrag setzt die Mounts der Windows Verzeichnisse aus diesem Beitag voraus: Windows Mounts in der Ubuntu Bash for Windows Zu dem sollte Git for Windows in einer aktuellen Version installiert sein.

Der Anfang

Wir starten mit einem neuen Verzeichnis und initiieren ein neues Git Repository mit git init. In diesem Repository versuchen wir einen neuen Commit anzulegen mit der Option -S, dies forciert die Signierung.

git commit -a -S --allow-empty -m 'signed commit'

Dieser Aufruf sollte fehlschlagen da Git keinerlei Informationen bekannt sind wie und mit was die Signierung ausgeführt werden soll.

gpg Schlüssel erstellen

Hat man noch keinen Schlüssel kann dieser wie folgt erstellt werden.
Man löscht un der Ubuntu Bash einen eventuell vorhandenen ~/.gnupg/ Ordner und erstellt dann einen Symlink auf den Ordner in der Windows Partition.

rm -rf ~/.gnupg/
ln -s /c/Users/<username>/.gnupg/ ~/.gnupg

Den Schlüssel kann man jetzt in der Ubuntu Bash erstellen indem man

gpg --full-generate-key

Ist der Schlüssel erstellt benötigt man noch dessen ID.

kirk@COMPUTER:~$ gpg --list-secret-keys --keyid-format LONG
/home/kirk/.gnupg/pubring.kbx
-----------------------------
sec   rsa4096/1111A11111A1A111 2020-01-06 [SC]

Die ID ist der Teil nach rsa4096/, in meinem Fall 1111A11111A1A111.

Jetzt muss dem Schlüssel noch eine (oder auch mehrere) uid zuweisen.

gpg --edit-key 1111A11111A1A111
gpg> adduid
...
gpg> save

Nun ist die Einrichtung von gpg abgeschlossen.

Bekommt man beim Ausführen eines gpg Befehls diese Warnung: gpg: WARNING: unsafe permissions on homedir '/home/<Username>/.gnupg' sollte man die Berechtigungen noch anpassen:

find ~/.gnupg/ -type f -exec chmod 600 {} \;
find ~/.gnupg/ -type d -exec chmod 700 {} \;

Git konfigurieren

Unter Windows muss man jetzt noch Git noch mitteilen welchen Schlüssel es verwerden soll und die Signierung aktivieren.

git config --global user.signingkey 1111A11111A1A111
git config --global commit.gpgsign true

In der Datei C:\Users\<Username>\.gnupg\gpg.conf kann man jetzt noch den gpg-Agent aktivieren um nicht jedes mal das Passwort eingeben zu müssen.

use-agent

Der Schluss

Um zu überprüfen ob alles funktioniert hat gehen wir wieder in den Ordner vom Anfang zurück und schauen ob der signierte Commit erstellen werden kann.

git commit -a -S --allow-empty -m 'signed commit'

Ist das Ergebniss in etwa [master (root-commit) ce39ccd] signed commit hat alles funktioniert. Wenn nicht fängt man noch einmal von Vorn an.

Info: Diese Einstellungen können auch mit diesen hier kombiniert werden: Andere Nutzer für Github, TFS, VSTS etc. verwenden

Quellen