Podpisywanie commitów git dzięki klucza SSH

nfsec.pl 1 rok temu

W

raz z wersją git 2.34.0 każdy nasz commit do kodu lub jego tag będzie mógł zostać podpisany kluczem SSH. Możliwość podpisywania dowolnych danych dzięki SSH została dodana już w 2019 roku z wydaniem OpenSSH 8.0. Jednak, aby używać tej funkcjonalności bez żadnego problemu najlepiej używać OpenSSH w wersji 8.8. Nasz proces zaczynamy od instalacji i konfiguracji klienta git i SSH:

sudo apt install -y git

Kolejnym krokiem jest wygenerowanie klucza SSH, który będzie używany do podpisywania:

ssh-keygen -t ed25519 -C "agresor@nfsek.pl" -f ~/.ssh/code_commit_signing

Odpowiadamy na pytania i upewniamy się, iż wpisaliśmy silne i unikalne hasło do klucza. Klucz ten będzie domyślnie przechowywany w naszym katalogu domowym pod katalogiem .ssh:

agresor@darkstar:~$ cat .ssh/code_commit_signing.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMzu8wjcnyAorVVtEjddoG2gaYjmRnHiZHvElYFcl/s/ agresor@nfsek.pl


Teraz możemy skonfigurować projekt git, aby wykorzystywał dodany klucz SSH:

mkdir projekt cd projekt git init git config --global user.email "agresor@nfsek.pl" git config --global user.name "Patryk Krawaczyński"

Nasze następne polecenia mówią gitowi, iż chcemy włączyć podpisywanie GPG, ale formatem będzie klucz SSH:

git config --global commit.gpgsign true git config --global tag.gpgsign true git config --global gpg.format ssh git config --global user.signingKey 'ssh-ed25519 \ AAAAC3NzaC1lZDI1NTE5AAAAIMzu8wjcnyAorVVtEjddoG2gaYjmRnHiZHvElYFcl/s/ agresor@nfsek.pl'

Teraz możemy sprawdzić, czy podpisywanie SSH zostało poprawnie skonfigurowane dzięki poleceń:

eval "$(ssh-agent -s)" ssh-add ~/.ssh/code_commit_signing git commit --allow-empty --message="Test klucza SSH 123"

Po uruchomieniu agenta SSH możemy dodać do niego klucz SSH po wpisaniu wcześniej wygenerowanego hasła. W celu wyświetlenia i zweryfikowania podpisu należy przekazać parametr --show-signature go git log lub git show:

agresor@darkstar:~/projekt$ git show --show-signature error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification commit 9e8038ab1227c4c34efdda4000a776326ca9db93 (HEAD -> master) No signature Author: Patryk Krawaczyński Date: Sun Nov 27 22:52:03 2022 +0000 Test klucza SSH 123

Przeglądając wynik polecenia możemy zauważyć komunikat o błędzie:

error: gpg.ssh.allowedSignersFile needs to be configured and exist
for ssh signature verification

Powodem, dla którego nie można zweryfikować tego podpisu, jest to, iż git nie wie, którym kluczom SSH ufać. W przeciwieństwie do GPG nie mamy „sieci zaufania”, w której można podpisywać klucze. Zamiast tego będziemy zarządzać listą zaufanych kluczy na swoim komputerze, który działa bardzo podobnie do pliku authorized_keys używanego przez SSH:

touch ~/.ssh/trusted_signers git config --global gpg.ssh.allowedSignersFile ~/.ssh/trusted_signers echo "agresor@nfsek.pl ssh-ed25519 \ AAAAC3NzaC1lZDI1NTE5AAAAIMzu8wjcnyAorVVtEjddoG2gaYjmRnHiZHvElYFcl/s/" \ > ~/.ssh/trusted_signers

Teraz ponownie możemy sprawdzić podpis:

agresor@darkstar:~/projekt$ git show --show-signature commit 9e8038ab1227c4c34efdda4000a776326ca9db93 (HEAD -> master) Good "git" signature for agresor@nfsek.pl with ED25519 key SHA256:z+TjH6NvOq+iGJLtzOfgQ+uMnmB/JNDVMbv/NczKi0Y Author: Patryk Krawaczyński Date: Sun Nov 27 22:52:03 2022 +0000 Test klucza SSH 123

GitHub również obsługuje weryfikację dzięki kluczy SSH, więc możemy podpisywać nasze kontrybucje i tagować je lokalnie przy użyciu samodzielnie wygenerowanego klucza publicznego SSH, który da innym pewność, co do pochodzenia autora wprowadzonej zmiany. jeżeli commit lub tag ma podpis SSH, który można zweryfikować kryptograficznie, GitHub wyświetli informację o weryfikacji. Aby Github mógł zweryfikować nasze kontrybucje, należy przejść do zakładki ustawień kluczy i zarejestrować swój klucz SSH do podpisu. Należy upewnić się, iż typ klucza został ustawiony na Signing Key (Klucz Podpisu).

Więcej informacji: How To Generate ed25519 SSH Key, Signing Git Commits with SSH Keys

Idź do oryginalnego materiału