Git i certyfikaty SSL
Git przez HTTPS ufa pakietowi, z którym go zbudowano albo skonfigurowano. Na Windowsie to często własny pakiet Gita, a nie magazyn Windows.
Którą listę czyta git
Git oddaje HTTPS curlowi i ufa liście, którą dostał curl. Git for Windows ma własny pakiet, ca-bundle.crt w swojej instalacji, i czyta go, chyba że http.sslBackend jest ustawione na schannel, co każe mu używać magazynu Windows (dokumentacja git-config). http.sslCAInfo w pliku konfiguracji gita albo GIT_SSL_CAINFO w środowisku kieruje go na inny plik (dokumentacja git-config).
Firmowy certyfikat główny w magazynie Windows trafia więc do przeglądarki, a nie do gita, i dlatego git pada z unable to get local issuer certificate, podczas gdy przeglądarka się łączy.
Zobacz, który plik czyta każdy git
certdoctor https://git.example.com/
Macierz zaufania ma wiersz dla każdego znalezionego git, z plikiem, który czyta, tym, czy ten plik ufa łańcuchowi, i poleceniem, które dodaje certyfikat główny:
git C:\Program Files\Git\cmd\git.exe does NOT trust the presented chain (120
anchors) detected
needs elevated rights: this store is outside this account's own files, so it belongs to
every account on the machine
run: cmd /c copy /b "C:\Program Files\Git\ucrt64\etc\ssl\certs\ca-bundle.crt"+"<certificate.pem>" "C:\Program Files\Git\ucrt64\etc\ssl\certs\ca-bundle.crt"
L0 pokazuje, czy ustawiono GIT_SSL_CAINFO albo GIT_SSL_CAPATH, a wiersz czyta konfigurację gita tak, jak czyta ją git.
Dodaj certyfikat główny
Polecenie dopisuje certyfikat na koniec pakietu, który czyta git - cmd /c copy /b na Windowsie, cat ... >> na Linuksie i macOS - i zostawia każdy certyfikat, który już w nim jest. Podstaw za <certificate.pem> pełną ścieżkę do certyfikatu głównego w formacie PEM i uruchom polecenie z uprawnieniami administratora, gdy wiersz tak mówi.
Ponowna instalacja albo aktualizacja Gita przepisuje jego pakiet i gubi to, co dopisano, a wiersz też o tym mówi. Na Windowsie drugą drogą jest przełączenie gita na Schannel przez git config --global http.sslBackend schannel: git ufa wtedy temu, czemu ufa magazyn Windows, w tym firmowemu certyfikatowi głównemu, który dział IT już tam umieścił.
Czego nie robić
git config http.sslVerify false wyłącza sprawdzanie certyfikatów dla każdego repozytorium, którego dotyczy.