Wydaje się, że Git rozpoznaje właściwość http.sslcainfo z .gitconfig, ale ignoruje ją podczas wykonywania? SEC_E_UNTRUSTED_ROOT

10

wszystko, mam działający łańcuch certyfikatów (testowalny z OpenSSL), ale jakoś nie mogę poradzić Gitowi, aby załadował te certyfikaty.

Otrzymuję ten sam błąd „niezaufanego organu głównego” (SEC_E_UNTRUSTED_ROOT) niezależnie od tego, czy moja konfiguracja git wskazuje na istniejący czy fałszywy plik łańcucha certyfikatów.

Aby uzyskać szczegółowe informacje, sprawdź załączony zrzut ekranu.wprowadź opis zdjęcia tutaj

Ustawienie używam .gitconfigdla fałszywego pliku:

sslCAInfo = C:/tmp/foobar.crt

lub, dla prawdziwego pliku, który współpracuje z OpenSSL:

sslCAInfo = C:/tmp/ca-bundle.crt

Transkrypcja konsoli:

C:\tmp>openssl version
OpenSSL 0.9.8h 28 May 2008

C:\tmp>git --version
git version 2.12.2.windows.2

C:\tmp>git config --list
http.sslverify=true
http.sslcainfo=C:/tmp/ca-bundle.crt

C:\tmp>dir
24.04.2017 13:45 10.875 ca-bundle.crt

c:\tmp>openssl s_client -state -connect https://mygithost:443 -CAfile .\ca-bundle.crt

Verify return code: 0 (ok)

C:\tmp git clone https://mygithost/bitbucket/scm/my.git
Cloning into ...
fatal: unable to access ... : schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted.

C:\tmp> git -c http.sslverify=false clone https://mygithost/bitbucket/scm/my.git
Cloning into ...
Resoliving deltas: 100%, done.

C:\tmp>git config --list
http.sslverify=true
http.sslcainfo=C:/tmp/foobar.crt

C:\tmp\xxx\git pull
fatal: unable to access ... : schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted.
Peter Muryshkin
źródło
Masz literówkę w konfiguracji gita: tml zamiast tmp
Tensibai 27.04.17
Uważam, że dziwny git nie zgłasza błędu w fakepath. Powinieneś zweryfikować inne poziomy konfiguracji (globalne, użytkownika i repozytorium), prawdopodobnie jest gdzieś
awaria
@Tensibai podaj instrukcje lub link do dokumentów, nie wiesz, jak to wszystko wydrukować. np. git config --global --list nie działa.
Peter Muryshkin
Git config --get-all powinien zrobić, aby wyświetlić każdą wynikową konfigurację z systemu, globalną i lokalną (nie mogę zweryfikować, że jestem na telefonie, i to tylko zgadnięcie, rozwiązaniem może być set SSL_CERT_FILE=C:\tmp\ca-bundle.crtpowiedzenie openssl, gdzie znaleźć pakiet
Tensibai
C:\git config --get-all-- => error: wrong number of arguments
Peter Muryshkin

Odpowiedzi:

2

Zostałem dotknięty tym właśnie dzisiaj po nowej instalacji, więc oto, jak sobie z tym poradziłem:

Z twoich logów (nacisk jest mój):

fatal: nie można uzyskać dostępu ...: schannel : next InitializeSecurityContext nie powiodło się:

git jest skonfigurowany do używania schannel (implementacja natywna Windows), ale schannel używa pakietu Windows certs, a nie pakietu cainfo.

Aby przełączyć się na openssl i użyć niestandardowego pliku pakietu, użyj tego:

git config --system http.sslbackend openssl

A teraz git honoruje pakiet CA przekazany w http.sslcainfo.

Alternatywnie, ponieważ mój błąd był problemem pakietu szyfrów, mogą Cię zainteresować następujące linki:

Tensibai
źródło
1

Miałem coś podobnego rok temu, więc mam nadzieję, że pamiętam -

Powinieneś mieć cały łańcuch certyfikatów w pliku crt. Sprawdź, czy masz wszystkie certyfikaty pośrednie między certyfikatem bitbucket a certyfikatem głównym (włącznie).

Możesz sprawdzić poprawny format dołączania ich w formacie pem (który moim zdaniem dotyczy twojego crt) tutaj .

Mój certyfikat został podpisany przez Comodo, kiedy miałem ten problem, ich certyfikat i pośredni nie były w domyślnym pakiecie ca dostarczanym przez większość systemów.

Mam nadzieję, że to pomaga!

Edycja: Teraz zauważyłem, że dzieje się tak również z fałszywym - spróbuj sprawdzić domyślne certyfikaty systemowe (każdy system ma takie certyfikaty). W systemie Windows możesz przejść do przystawki Certyfikaty Windows mmc .

arieljannai
źródło