Jak sprawić, by git zaakceptował certyfikat z własnym podpisem?

Używając Gita, czy istnieje sposób, aby powiedzieć mu, aby zaakceptował certyfikat z własnym podpisem?

Używam serwera https do hostowania serwera git, ale na razie certyfikat jest własnoręcznie podpisany.

Kiedy próbuję stworzyć repo po raz pierwszy:

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
Author: Flow, 2012-07-23

16 answers

Aby na stałe zaakceptować konkretny certyfikat

Spróbuj http.sslCAPath lub http.sslCAInfo. odpowiedź Adama Spiersa daje kilka świetnych przykładów. Jest to najbezpieczniejsze rozwiązanie tego problemu.

Aby wyłączyć weryfikację TLS / SSL dla pojedynczego polecenia git

Spróbuj przekazać -c do git z odpowiednią zmienną konfiguracyjną, lub użyj Flow ' s answer :

git -c http.sslVerify=false clone https://example.com/path/to/git
Aby wyłączyć weryfikację SSL dla określonego repozytorium

Jeśli repozytorium jest całkowicie pod twoja kontrola, możesz spróbować:

git config --global http.sslVerify false

Istnieje sporo opcji konfiguracji SSL w git. Ze strony podręcznika git config:

http.sslVerify
    Whether to verify the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_NO_VERIFY environment variable.

http.sslCAInfo
    File containing the certificates to verify the peer with when fetching or pushing
    over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.

http.sslCAPath
    Path containing files with the CA certificates to verify the peer with when
    fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CAPATH environment variable.

Kilka innych przydatnych opcji konfiguracji SSL:

http.sslCert
    File containing the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CERT environment variable.

http.sslKey
    File containing the SSL private key when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_KEY environment variable.

http.sslCertPasswordProtected
    Enable git's password prompt for the SSL certificate. Otherwise OpenSSL will
    prompt the user, possibly many times, if the certificate or private key is encrypted.
    Can be overridden by the GIT_SSL_CERT_PASSWORD_PROTECTED environment variable.
 1281
Author: Christopher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-04 02:01:05

Możesz ustawić GIT_SSL_NO_VERIFY na true:

GIT_SSL_NO_VERIFY=true git clone https://example.com/path/to/git

Lub alternatywnie skonfiguruj Git, aby nie sprawdzał połączenia w wierszu poleceń:

git -c http.sslVerify=false clone https://example.com/path/to/git

Zauważ, że jeśli nie weryfikujesz certyfikatów SSL/TLS, to jesteś podatny na ataki MitM.

 174
Author: Flow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-27 16:54:52

Nie jestem wielkim fanem [EDIT: original versions of the] 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ć certyfikatom podpisanym przy pierwszym odbiorze bez dodatkowej metody weryfikacji, użycie certyfikatu do kolejnych operacji git przynajmniej utrudnia życie atakom, które występują tylko Po pobraniu certyfikatu. Innymi słowy, jeśli certyfikat, który pobrałeś jest prawdziwy, więc od tego momentu jesteś dobry. W przeciwieństwie do tego, jeśli po prostu wyłączysz weryfikację, jesteś otwarty na każdy rodzaj ataku man-in-the-middle w dowolnym momencie.

Aby podać konkretny przykład: słynny repo.or.cz repozytorium dostarcza certyfikat z własnym podpisem . Mogę pobrać ten plik, umieścić go gdzieś jak /etc/ssl/certs, a następnie zrobić:

# Initial clone
GIT_SSL_CAINFO=/etc/ssl/certs/rorcz_root_cert.pem \
    git clone https://repo.or.cz/org-mode.git

# Ensure all future interactions with origin remote also work
cd org-mode
git config http.sslCAInfo /etc/ssl/certs/rorcz_root_cert.pem

Zauważ, że używając lokalnego git config tutaj (tzn. bez --global) oznacza, że ten własnoręcznie podpisany 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 ryzyko przeprowadzenia weryfikacji przez inny organ certyfikujący, który może być potencjalnie zagrożony.

 146
Author: Adam Spiers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-14 11:11:07

Git Self-Signed Certificate Configuration]}

Tl;dr

Nigdy nie wyłączaj całej weryfikacji SSL!

To tworzy złą kulturę bezpieczeństwa. Nie bądź tą osobą.

Klucze konfiguracyjne, których szukasz, to:

Są one przeznaczone do konfigurowania certyfikatów hostów, którym ufasz.]}

Służą do konfigurowania certyfikatu tak, aby odpowiadał na wyzwania SSL.

Wybiórczo zastosuj powyższe ustawienia do konkretnych hostów.

Globalny .gitconfig dla organów certyfikujących z własnym podpisem

Dla dobra własnego i kolegów oto jak udało nam się uzyskać własnoręcznie podpisane certyfikaty do pracy bez wyłączania sslVerify. Edytuj Twój .gitconfig aby użyć git config --global -e dodaj te:

# Specify the scheme and host as a 'context' that only these settings apply
# Must use Git v1.8.5+ for these contexts to work
[credential "https://your.domain.com"]
  username = user.name

  # Uncomment the credential helper that applies to your platform
  # Windows
  # helper = manager

  # OSX
  # helper = osxkeychain

  # Linux (in-memory credential helper)
  # helper = cache

  # Linux (permanent storage credential helper)
  # https://askubuntu.com/a/776335/491772

# Specify the scheme and host as a 'context' that only these settings apply 
# Must use Git v1.8.5+ for these contexts to work
[http "https://your.domain.com"]
  ##################################
  # Self Signed Server Certificate #
  ##################################

  # MUST be PEM format
  # Some situations require both the CAPath AND CAInfo 
  sslCAInfo = /path/to/selfCA/self-signed-certificate.crt
  sslCAPath = /path/to/selfCA/
  sslVerify = true

  ###########################################
  # Private Key and Certificate information #
  ###########################################

  # Must be PEM format and include BEGIN CERTIFICATE / END CERTIFICATE, 
  # not just the BEGIN PRIVATE KEY / END PRIVATE KEY for Git to recognise it.
  sslCert = /path/to/privatekey/myprivatecert.pem

  # Even if your PEM file is password protected, set this to false.
  # Setting this to true always asks for a password even if you don't have one.
  # When you do have a password, even with this set to false it will prompt anyhow. 
  sslCertPasswordProtected = 0

Bibliografia:

Określ config kiedy git clone - ing

Jeśli musisz zastosować go na zasadzie repo, dokumentacja mówi, aby po prostu uruchomić git config --local w katalogu repo. Dobrze. to nie jest przydatne, gdy nie masz repo sklonowane lokalnie jeszcze teraz, prawda?

Możesz zrobić global -> local hokey-pokey, ustawiając globalną konfigurację jak powyżej, a następnie skopiować te ustawienia do lokalnej konfiguracji repo po klonowaniu...

Lub co można zrobić to podać polecenia konfiguracyjne w git clone które zostaną zastosowane do docelowego repo po jego sklonowaniu.

# Declare variables to make clone command less verbose     
OUR_CA_PATH=/path/to/selfCA/
OUR_CA_FILE=$OUR_CA_PATH/self-signed-certificate.crt
MY_PEM_FILE=/path/to/privatekey/myprivatecert.pem
SELF_SIGN_CONFIG="-c http.sslCAPath=$OUR_CA_PATH -c http.sslCAInfo=$OUR_CA_FILE -c http.sslVerify=1 -c http.sslCert=$MY_PEM_FILE -c http.sslCertPasswordProtected=0"

# With this environment variable defined it makes subsequent clones easier if you need to pull down multiple repos.
git clone $SELF_SIGN_CONFIG https://mygit.server.com/projects/myproject.git myproject/

One Liner

EDIT: Zobacz vonc'S odpowiedź która wskazuje zastrzeżenie o ścieżki bezwzględne i względne dla konkretnych wersji Gita od 2.14.x / 2.15 to this one liner

git clone -c http.sslCAPath="/path/to/selfCA" -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" -c http.sslVerify=1 -c http.sslCert="/path/to/privatekey/myprivatecert.pem" -c http.sslCertPasswordProtected=0 https://mygit.server.com/projects/myproject.git myproject/

CentOS unable to load client key

Jeśli próbujesz tego na CentOS, a Twój plik .pem daje Ci

unable to load client key: "-8178 (SEC_ERROR_BAD_KEY)"

Następnie będziesz chciał tę odpowiedź StackOverflow o tym, jak curl używa NSS zamiast otwartego SSL.

I będziesz chciał przebudować curl ze źródła :

git clone http://github.com/curl/curl.git curl/
cd curl/
# Need these for ./buildconf
yum install autoconf automake libtool m4 nroff perl -y
#Need these for ./configure
yum install openssl-devel openldap-devel libssh2-devel -y

./buildconf
su # Switch to super user to install into /usr/bin/curl
./configure --with-openssl --with-ldap --with-libssh2 --prefix=/usr/
make
make install

uruchom ponownie komputer, ponieważ libcurl jest nadal w pamięci jako współdzielony biblioteka

Python, pip i conda

Powiązane: Jak dodać niestandardowy certyfikat główny urzędu certyfikacji do sklepu urzędu certyfikacji używanego przez pip w systemie Windows?

 47
Author: Josh Peak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-11 04:35:44

Ciągle natykam się na ten problem, więc napisałem skrypt, aby pobrać certyfikat z serwera i zainstalować go do~/.gitcerts, a następnie zaktualizuj git-config, aby wskazać te certyfikaty. Jest on przechowywany w global config, więc wystarczy uruchomić go tylko raz na pilota.

Https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh

 14
Author: Craig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-19 22:40:44

Ta odpowiedź jest fragmentem tego artykułu , którego autorem jest Michael Kauffman.

Użyj Git dla Windows z firmowym certyfikatem SSL

Wydanie :

Jeśli masz firmowy certyfikat SSL i chcesz sklonować repo z konsoli lub VSCode, otrzymasz następujący błąd:

fatal: unable to access " https://myserver/tfs/DefaultCollection/_git/Proj/': problem z certyfikatem SSL: nie można uzyskać lokalnego wystawcy certyfikat

Rozwiązanie :

  1. Wyeksportuj główny certyfikat z własnym podpisem do pliku. Możesz to zrobić z poziomu przeglądarki.

  2. Zlokalizuj " ca-bundle.crt " plik w folderze git (aktualna wersja C:\Program Files\Git \ usr \ ssl \ certs ale jest zmieniony w przeszłości). Skopiuj plik do swojego profilu użytkownika. Otwórz go za pomocą edytora tekstu, takiego jak VSCode, i dodaj zawartość wyeksportowanego certyfikatu na końcu pliku.

Teraz musimy skonfigurować git do używania nowego pliku:

git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt

To doda następujący wpis do twojego .plik gitconfig w katalogu głównym Twojego profilu użytkownika.

[http] sslCAInfo = C:/Users/<yourname>/ca-bundle.crt

 14
Author: AperioOculus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 15:34:41

Aby wyłączyć weryfikację SSL dla określonego repozytorium Jeśli repozytorium jest całkowicie pod twoją kontrolą, możesz spróbować:

 git config --global http.sslVerify false
 11
Author: Saurabh Verma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-26 11:19:35

Ustawianie http nie jest dobrą praktyką.sslVerify false. Zamiast tego możemy użyć certyfikatu SSL.

Agent kompilacji będzie używał https z certyfikatem SSL i PAT do uwierzytelniania. Tutaj wpisz opis obrazka

Tutaj wpisz opis obrazka

Tutaj wpisz opis obrazka

Skopiuj zawartość pliku cer wraz z-begin - and-end--.

Git bash na build agent => Git config-global http.sslcainfo "C:/Program Files / Git/mingw64/ssl/certs / ca-bundle.crt" Przejdź do tego pliku i dołącz .cer treść.

W ten sposób Agent kompilacji może uzyskać dostęp do certyfikatu SSL
 5
Author: Palash Roy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-17 12:00:17

Bądź ostrożny, gdy używasz jednego linera za pomocą sslKey lub sslCert, jak w Josh Peak's odpowiedz:

git clone -c http.sslCAPath="/path/to/selfCA" \
  -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" \
  -c http.sslVerify=1 \
  -c http.sslCert="/path/to/privatekey/myprivatecert.pem" \
  -c http.sslCertPasswordProtected=0 \
https://mygit.server.com/projects/myproject.git myproject

Tylko Git 2.14.x / 2.15 (Q3 2015) będzie w stanie poprawnie zinterpretować ścieżkę podobną do ~username/mykey (podczas gdy nadal może interpretować ścieżkę absolutną taką jak /path/to/privatekey).

Zobacz commit 8d15496 (20 Jul 2017) by Junio C Hamano (gitster).
Helped-by: Charles Bailey (hashpling).
(dodany przez Junio C Hamano -- gitster -- in commit 17b1e1d, 11 Aug 2017)

http.c: http.sslcert i http.sslkey są obie nazwy ścieżek

Kiedy powstała nowoczesna ścieżka kodowa http_options() do analizy różne http.* options at 29508e1 ("Izoluj współdzielone żądanie HTTP funkcjonalność", 2005-11-18, Git 0.99.9 k), a później Poprawiono interakcja pomiędzy wieloma plikami konfiguracyjnymi w 7059cd9 ("http_init(): Fix config file parsing", 2009-03-09, Git 1.6.3-rc0), przeanalizowaliśmy zmienne konfiguracyjne, takie jak http.sslkey, http.sslcert jako zwykły sznurki waniliowe, bo git_config_pathname() to rozumie Przedrostek "~[username]/ " nie istniał.

Później przekonwertowaliśmy niektóre z nich (mianowicie http.sslCAPath i http.sslCAInfo) do użycia funkcji i dodaliśmy zmienne takie jak http.cookeyFile http.pinnedpubkey Aby korzystać z funkcji od początku. Z tego powodu wszystkie te zmienne rozumieją przedrostek " ~[username]/".

Niech pozostałe dwie zmienne, http.sslcert i http.sslkey, również świadomi konwencji, gdyż obie są wyraźnie ścieżkami do pliki.

 4
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-13 18:25:42

Używając 64-bitowej wersji Git na Windows, po prostu dodaj certyfikat CA do tych plików:

  • C:\Program Files\Git \ mingw64 \ ssl \ certs \ ca-bundle.crt
  • C:\Program Files\Git \ mingw64 \ ssl \ certs \ ca-bundle.zaufanie.crt

Jeśli jest to tylko certyfikat z własnym podpisem serwera dodaj go do

  • C:\Program Files\Git\mingw64 \ ssl \ cert.pem
 4
Author: Flaviu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 12:52:20

Sprawdź ustawienia antywirusa i zapory.

Z jednego dnia na drugi, git już nie działał. Z tym, co opisano powyżej, odkryłem, że Kaspersky umieszcza osobisty certyfikat główny z własnym podpisem antywirusowym pośrodku. Nie udało mi się pozwolić Gitowi na zaakceptowanie tego certyfikatu zgodnie z powyższymi instrukcjami. Zrezygnowałem z tego. To, co działa dla mnie, to wyłączenie funkcji skanowania zaszyfrowanych połączeń.

  1. Otwórz Kaspersky
  2. Ustawienia > Dodatkowe > Sieć > Do Nie skanuj połączeń szyfrowanych

Po tym, git działa ponownie z włączoną obsługą sslVerify.

Uwaga. Nadal nie jest to dla mnie satysfakcjonujące, ponieważ chciałbym, aby ta funkcja mojego antywirusa była aktywna. W ustawieniach zaawansowanych Kaspersky wyświetla listę witryn, 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 są pewne tematy, np. https://forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211

 3
Author: Henk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 12:03:45

Na Windowsie to mi działało:

Dodaj zawartość podpisanego certyfikatu na końcu pliku ca-bundle . W tym -----certyfikat BEGIN----- oraz -----świadectwo końcowe----- Linie

Lokalizacja pliku ca-bundle to zazwyczaj C:\Program Files\Git\mingw64 \ ssl \ certs

Następnie dodaj ścieżkę ca-bundle do globalnego git config. Poniższe polecenie robi sztuczkę: git config --global http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"

Uwaga: ścieżka zależy od twojej lokalnej ścieżki pliku ca-bundle!

 2
Author: rw026,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-24 10:26:53

W .gitconfig plik możesz dodać podaną poniżej wartość, aby cert z podpisem własnym był akceptowalny

SslCAInfo = / home / XXXX / abc.crt

 1
Author: RahulMohan Kolakandy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-09 15:53:45

Robię to tak:

git init
git config --global http.sslVerify false
git clone https://myurl/myrepo.git
 1
Author: Tadej,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-27 19:15:31

Moja odpowiedź może się spóźnić, ale zadziałała. To może komuś pomóc.

Próbowałem wyżej wymienionych kroków i to nie rozwiązało problemu.

Try this git config --global http.sslVerify false

 1
Author: Manjuboyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-19 03:44:42

Używam komputera z systemem windows i Ten artykuł mi pomógł. W zasadzie otworzyłem ca-bundle.crt w notatniku i dodano w nim certyfikaty łańcucha (wszystkie). Ten problem zwykle ma miejsce w sieciach firmowych, gdzie mamy pośredników siedzących pomiędzy systemem a git repo. Musimy wyeksportować wszystkie certy w łańcuchu cert z wyjątkiem leaf cert w formacie base 64 i dodać je do ca-bundle.crt, a następnie skonfigurować git dla tego zmodyfikowanego pliku crt.

 1
Author: love gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-06 09:29:52