Korzystając z Git, czy istnieje sposób, aby nakazać mu zaakceptowanie certyfikatu z podpisem własnym?
Używam serwera https do hostowania serwera git, ale na razie certyfikat jest samopodpisany.
Kiedy próbuję utworzyć tam repozytorium:
git push origin master -f
Dostaję błąd:
error: Cannot access URL
https://the server/git.aspx/PocketReferences/, return code 22
fatal: git-http-push failed
git
version-control
https
self-signed
Ian Vink
źródło
źródło
sslcainfo
opcji. jeśli możesz z powodzeniem użyćcurl --cacert
do wyciągnięcia ścieżki repozytorium, ale git nie działa, powinieneś dodać certyfikat do tajemniczego programu pęku kluczy OSX. więcej tutaj superuser.com/questions/605900/…Odpowiedzi:
Aby na stałe zaakceptować określony certyfikat
Spróbuj
http.sslCAPath
lubhttp.sslCAInfo
. Odpowiedź Adama Spiersa zawiera kilka świetnych przykładów. To jest najbezpieczniejsze rozwiązanie tego pytania.Aby wyłączyć weryfikację TLS / SSL dla pojedynczego polecenia git
spróbuj przechodząc
-c
dogit
z właściwego zmiennej konfiguracji lub użyj odpowiedź Flow :Aby wyłączyć weryfikację SSL dla określonego repozytorium
Jeśli repozytorium jest całkowicie pod twoją kontrolą, możesz spróbować:
Istnieje wiele opcji konfiguracji SSL
git
. Ze strony podręcznika użytkownikagit config
:Kilka innych przydatnych opcji konfiguracji SSL:
źródło
git -c http.sslVerify=false clone https://domain.com/path/to/git
rozwiązało mój problem, dzięki ...Można ustawić
GIT_SSL_NO_VERIFY
natrue
:lub alternatywnie skonfiguruj Git, aby nie weryfikował połączenia w wierszu poleceń:
Pamiętaj, że jeśli nie zweryfikujesz certyfikatów SSL / TLS, jesteś podatny na ataki MitM .
źródło
-c
flagi on,git
aby zmodyfikować wartość konfiguracji dla pojedynczego polecenia. Myślę jednak, że ta składnia jest czystsza.-c
. Właściwie uważam, że jest to czystsze rozwiązanie zamiast zanieczyszczać środowisko. :)git -c http.sslVerify=false <gitSubCommand>
może również działać za pośrednictwem pośredników.Nie jestem wielkim fanem [EDYTOWANIA: oryginalnych wersji] istniejących odpowiedzi, ponieważ wyłączenie kontroli bezpieczeństwa powinno być ostatecznością, a nie pierwszym oferowanym rozwiązaniem. Mimo że nie można ufać samopodpisanym certyfikatom przy pierwszym otrzymaniu bez dodatkowej metody weryfikacji, użycie certyfikatu do kolejnych
git
operacji przynajmniej utrudnia życie w przypadku ataków, które pojawiają się dopiero po pobraniu certyfikatu. Innymi słowy, jeśli pobrany certyfikat jest autentyczny, od tego momentu jesteś dobry. Przeciwnie, jeśli po prostu wyłączysz weryfikację, jesteś otwarty na każdy rodzaj ataku typu man-in-the-middle w dowolnym momencie .Podając konkretny przykład: słynne
repo.or.cz
repozytorium zapewnia samopodpisany certyfikat . Mogę pobrać ten plik, umieścić go gdzieś jak/etc/ssl/certs
, a następnie zrobić:Zauważ, że użycie lokalnego
git config
tutaj (tj. Bez--global
) oznacza, że ten samopodpisany certyfikat jest zaufany tylko dla tego konkretnego repozytorium, co jest miłe. Jest to również przyjemniejsze niż używanie,GIT_SSL_CAPATH
ponieważ eliminuje ryzykogit
przeprowadzenia weryfikacji za pośrednictwem innego urzędu certyfikacji, co może być potencjalnie zagrożone.źródło
/etc/ssl/certs/
katalogu i to sprawnie uporządkuje wszystko, czego potrzebujesz. Nie testowałem tego, pamiętajcie, ale może to pozwolić na użycie--global
całej gamy certyfikatów. Warto jednak przetestować.git config http.validCertFingerprint <base64-encoded-hash-of-certifcate>
git clone --config http.sslCAInfo=<path_to_cert> https://repo.or.cz/org-mode.git
(Nie trzeba później wywoływać polecenia „git config”).Konfiguracja certyfikatu z podpisem własnym Git
tl; dr
Klucze konfiguracji, których szukasz:
http.sslverify
- Zawsze prawda. Zobacz powyższą notatkę.Służą one do konfigurowania zaufanych certyfikatów hosta
http.sslCAPath
http.sslCAInfo
Służą one do konfigurowania TWOJEGO certyfikatu, aby odpowiadał na wyzwania związane z SSL.
http.sslCert
http.sslCertPasswordProtected
Selektywnie zastosuj powyższe ustawienia do określonych hostów.
http.<url>.*
Globalny
.gitconfig
dla urzędów certyfikacji z podpisem własnymDla mnie i moich kolegów tutaj jest to, jak udało nam się uzyskać samopodpisane certyfikaty do działania bez wyłączania
sslVerify
. Edytuj swoje.gitconfig
za pomocągit config --global -e
dodaj te:Bibliografia:
Określić konfigurację podczas
git clone
uruchamianiaJeśli musisz zastosować go na zasadzie repo, dokumentacja mówi, aby po prostu uruchomić się
git config --local
w katalogu repo. Cóż, to nie jest przydatne, gdy repo nie zostało jeszcze sklonowane lokalnie, prawda?Możesz wykonać
global -> local
hokey-pokey, ustawiając globalną konfigurację jak wyżej, a następnie skopiuj te ustawienia do lokalnej konfiguracji repo po sklonowaniu ...LUB to, co możesz zrobić, to określić komendy config
git clone
zastosowane do docelowego repozytorium po sklonowaniu.Jedna wkładka
EDIT: Zobacz VonC jest odpowiedź , która wskazuje na zastrzeżenie o bezwzględnych i względnych ścieżek dla konkretnych wersji git z 2.14.x / 2,15 do tej jednej wkładki
CentOS
unable to load client key
Jeśli próbujesz tego na CentOS, a Twój
.pem
plik Ci to dajeNastępnie będziesz potrzebować odpowiedzi StackOverflow o tym, jak
curl
używa NSS zamiast Open SSL.I będziesz chciał przebudować
curl
ze źródła :uruchom ponownie komputer, ponieważ libcurl jest nadal w pamięci jako biblioteka współdzielona
Python, pip i conda
Powiązane : Jak dodać niestandardowy certyfikat główny urzędu certyfikacji do sklepu CA Store używanego przez pip w systemie Windows?
źródło
http.sslCAPath
. W moim przypadku musiałem użyć,http.sslCAInfo
aby określić konkretny plik. Pozwoliło to Gitowi połączyć się z naszym prywatnym GitHub bez wyłączania sprawdzania poprawności SSL.Wciąż napotykam ten problem, więc napisałem skrypt, aby pobrać samopodpisany certyfikat z serwera i zainstalować go w ~ / .gitcerts, a następnie zaktualizować git-config, aby wskazywał na te certyfikaty. Jest przechowywany w konfiguracji globalnej, więc wystarczy uruchomić go tylko raz na pilota.
https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh
źródło
Ta odpowiedź została zaczerpnięta z tego artykułu autorstwa Michaela Kauffmana.
Użyj Git dla Windows z korporacyjnym certyfikatem SSL
Problem :
Jeśli masz korporacyjny certyfikat SSL i chcesz sklonować swoje repozytorium z konsoli lub VSCode, pojawia się następujący błąd:
krytyczny: nie można uzyskać dostępu do „ https: // mój serwer / tfs / DefaultCollection / _git / Proj / ”: problem z certyfikatem SSL: nie można uzyskać lokalnego certyfikatu wystawcy
Rozwiązanie :
Wyeksportuj główny samopodpisany certyfikat do pliku. Możesz to zrobić z poziomu przeglądarki.
Znajdź plik „ca-bundle.crt” w folderze git (aktualna wersja C: \ Program Files \ Git \ usr \ ssl \ certs, ale w przeszłości była zmieniana). Skopiuj plik do swojego profilu użytkownika. Otwórz go za pomocą edytora tekstu, takiego jak VSCode, i dodaj treść wyeksportowanego certyfikatu na końcu pliku.
Teraz musimy skonfigurować git, aby używał nowego pliku:
git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt
Spowoduje to dodanie następującego wpisu do pliku .gitconfig w katalogu głównym profilu użytkownika.
[http] sslCAInfo = C:/Users/<yourname>/ca-bundle.crt
źródło
Aby wyłączyć weryfikację SSL dla określonego repozytorium Jeśli repozytorium jest całkowicie pod twoją kontrolą, możesz spróbować:
źródło
Bądź ostrożny, gdy używasz jednej liniowej używając sslKey lub sslCert, jak w Josh pik „s odpowiedź :
Tylko Git 2.14.x / 2.15 (III kwartał 2015) byłby w stanie
~username/mykey
poprawnie zinterpretować ścieżkę (podczas gdy nadal może interpretować ścieżkę bezwzględną jak/path/to/privatekey
).Zobacz zatwierdzenie 8d15496 (20 lipca 2017 r.) Przez Junio C. Hamano (
gitster
) .Pomocnik: Charles Bailey (
hashpling
) .(Połączone przez Junio C Hamano -
gitster
- w commit 17b1e1d , 11 sierpnia 2017)źródło
Używając 64-bitowej wersji Git na Windows, po prostu dodaj samopodpisany certyfikat CA do tych plików:
Jeśli jest to tylko samopodpisany certyfikat serwera, dodaj go do
źródło
Sprawdź ustawienia antywirusa i zapory ogniowej.
Z dnia na dzień git już nie działał. Zgodnie z tym, co opisano powyżej, odkryłem, że Kaspersky umieszcza samopodpisany osobisty certyfikat główny antywirusa w środku. Nie udało mi się pozwolić Gitowi zaakceptować tego certyfikatu zgodnie z powyższymi instrukcjami. Zrezygnowałem z tego. Dla mnie działa wyłączenie funkcji Skanuj połączenia szyfrowane.
Następnie git działa ponownie z włączoną funkcją sslVerify.
Uwaga. To wciąż nie jest dla mnie satysfakcjonujące, ponieważ chciałbym mieć tę funkcję mojego programu antywirusowego aktywną. W ustawieniach zaawansowanych Kaspersky wyświetla listę stron internetowych, które nie będą działać z tą funkcją. Github nie jest wymieniony jako jeden z nich. Sprawdzę to na forum Kaspersky. Wydaje się, że istnieją pewne tematy, np. Https://forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211
źródło
W .gitconfig pliku możesz dodać podaną poniżej wartość, aby samopodpisany certyfikat był akceptowalny
sslCAInfo = /home/XXXX/abc.crt
źródło
Robię to tak:
źródło
--global
! Wiele samouczków pokazuje,--global
ale jest to bardzo zły pomysł w ogóle, ahttp.sslVerify
szczególnie w szczególności. Gdy tylko będziesz mieć więcej niż jednego klona z różnych projektów, firm, zespołów na komputerze, możesz szybko wpaść w kłopoty. Na przykład identyfikator użytkownika i wiadomości e-mail przeciekające z jednego projektu do drugiego mogą być dość krępujące. I stosując--global
nahttp.sslVerify
może otworzyć cię do wszystkich kwestii związanych z bezpieczeństwem rodzaju. Więc: Nie używaj--global
- chyba że jesteś w pełni świadomy skutków ubocznych i jesteś przygotowany do podjęcia ryzyka.W systemie Windows działało to dla mnie:
Dodaj treść samopodpisanego certyfikatu na końcu pliku pakietu ca. W tym ----- BEGIN CERTIFICATE ----- i ----- END CERTIFICATE ----- linie
Lokalizacja pliku ca-bundle to zwykle C: \ Program Files \ Git \ mingw64 \ ssl \ certs
Następnie dodaj ścieżkę pliku ca-bundle do globalnej konfiguracji git. Następujące polecenie załatwia sprawę:
git config --global http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"
Uwaga: Ścieżka zależy od lokalnej ścieżki pliku pakietu ca!
źródło
Ustawienie http.sslVerify na false nie jest dobrą praktyką. Zamiast tego możemy użyć certyfikatu SSL.
Tak więc agent kompilacji użyje https z certyfikatem SSL i PAT do uwierzytelnienia.
Skopiuj zawartość pliku cer, w tym –begin — i –end--.
git bash on build agent => git config –global http.sslcainfo „C: / Program Files / Git / mingw64 / ssl / certs / ca-bundle.crt” Przejdź do tego pliku i dołącz zawartość .cer.
W ten sposób agent kompilacji może uzyskać dostęp do certyfikatu SSL
źródło
Moja odpowiedź może się spóźnić, ale zadziałała dla mnie. To może komuś pomóc.
Próbowałem wyżej wymienionych kroków, ale to nie rozwiązało problemu.
Spróbuj tego
git config --global http.sslVerify false
źródło
Używam komputera z systemem Windows i ten artykuł pomógł mi. Zasadniczo otworzyłem plik ca-bundle.crt w notatniku i dodałem do niego certyfikaty łańcuchowe (wszystkie). Ten problem zwykle występuje w sieciach firmowych, w których pośrednicy siedzą między systemem a repozytorium git. Musimy wyeksportować wszystkie certyfikaty w łańcuchu certyfikatów oprócz liścia certyfikatu w formacie base 64 i dodać je wszystkie do pliku ca-bundle.crt, a następnie skonfigurować git dla tego zmodyfikowanego pliku crt.
źródło