Administrator systemu dla projektu, w którym się znajduję, zdecydował, że SSH jest „zbyt wielkim problemem”; zamiast tego skonfigurował Git tak, aby był dostępny za pośrednictwem https://
adresu URL (i uwierzytelniania nazwy użytkownika / hasła). Serwer dla tego adresu URL przedstawia certyfikat z podpisem własnym, więc doradził wszystkim, aby wyłączyć sprawdzanie poprawności certyfikatu. Nie wydaje mi się to dobrą konfiguracją pod względem bezpieczeństwa.
Czy można powiedzieć Gitowi, że dla zdalnego X (lub lepiej, dowolnego zdalnego w jakimkolwiek repozytorium, od którego się tak dzieje https://$SERVERNAME/
) ma akceptować określony certyfikat i tylko ten certyfikat? Zasadniczo zredplikuj zachowanie klucza serwera SSH.
git
ssl-certificate
zwol
źródło
źródło
Odpowiedzi:
Krótko:
~/git-certs/cert.pem
) Plikugit
zaufanie do tego certyfikatu przy użyciuhttp.sslCAInfo
parametruBardziej szczegółowo:
Uzyskaj certyfikat z podpisem własnym zdalnego serwera
Zakładając, że adres URL serwera to
repos.sample.com
i chcesz uzyskać do niego dostęp przez port443
.Istnieje wiele opcji, jak to zdobyć.
Uzyskaj certyfikat za pomocą openssl
Przechwyć dane wyjściowe do pliku
cert.pem
i usuń wszystkie z wyjątkiem części między (włącznie)-BEGIN CERTIFICATE-
i-END CERTIFICATE-
Zawartość wynikowego pliku ~ / git-certs / cert.pem może wyglądać następująco:
Uzyskaj certyfikat za pomocą przeglądarki internetowej
Używam Redmine z repozytoriami Git i uzyskuję dostęp do tego samego adresu URL dla interfejsu internetowego i dla dostępu do wiersza poleceń git. W ten sposób musiałem dodać wyjątek dla tej domeny do mojej przeglądarki internetowej.
Korzystając z przeglądarki Firefox, poszedłem do
Options -> Advanced -> Certificates -> View Certificates -> Servers
, znalazłem tam podpisanego przez siebie hosta, wybrałem go i za pomocąExport
przycisku otrzymałem dokładnie ten sam plik, co utworzony za pomocąopenssl
.Uwaga: byłem trochę zaskoczony, nie ma widocznej nazwy organu. Jest okej.
Posiadanie zaufanego certyfikatu w dedykowanym pliku
Poprzednie kroki powinny skutkować umieszczeniem certyfikatu w jakimś pliku. Nie ma znaczenia, jaki to plik, o ile jest widoczny dla twojego gita podczas uzyskiwania dostępu do tej domeny. użyłem
~/git-certs/cert.pem
Uwaga: jeśli potrzebujesz więcej zaufanych certyfikatów z podpisem własnym, umieść je w tym samym pliku:
To zadziała (ale testowałem to tylko z jednym certyfikatem).
Skonfiguruj git, aby ufał temu certyfikatowi
Możesz również spróbować zrobić to w całym systemie, używając
--system
zamiast--global
.I przetestuj to: będziesz mógł teraz komunikować się ze swoim serwerem bez uciekania się do:
Jeśli już ustawiłeś swojego gita na ignorowanie certyfikatów ssl, usuń to:
i możesz też sprawdzić, czy wszystko zrobiłeś poprawnie, bez błędów ortograficznych:
co powinno zawierać listę wszystkich zmiennych, które ustawiłeś globalnie. (Źle napisałem http na htt).
źródło
Ustawienia użytkownika OSX.
Postępowanie zgodnie z krokami zaakceptowanej odpowiedzi zadziałało dla mnie z niewielkim dodatkiem podczas konfigurowania w systemie OSX.
Umieściłem
cert.pem
plik w katalogu pod moim zalogowanym użytkownikiem OSX i tym samym zmusiłem mnie do dostosowania lokalizacji dla zaufanego certyfikatu.Skonfiguruj git, aby ufał temu certyfikatowi:
źródło