NFsec Logo

Podpisywanie commitów git za pomocą klucza SSH

28/11/2022 w Administracja, Bezpieczeństwo Brak komentarzy.  (artykuł nr 837, ilość słów: 527)

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 za pomocą 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ę, że 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, że 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 za pomocą 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, że 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ę za pomocą 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śli 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ę, że typ klucza został ustawiony na Signing Key (Klucz Podpisu).

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

Kategorie K a t e g o r i e : Administracja, Bezpieczeństwo

Tagi T a g i : , , , , , , , , ,

Komentowanie tego wpisu jest zablokowane.