Hoe kan ik ervoor zorgen dat git een zelfondertekend certificaat accepteert?

Is er een manier om met Git te zeggen dat het een zelfondertekend certificaat moet accepteren?

Ik gebruik een https-server om een git-server te hosten, maar voorlopig is het certificaat zelfondertekend.

Als ik de repo daar voor de eerste keer probeer aan te maken:

git push origin master -f

Ik krijg de foutmelding:

error: Cannot access URL     
https://the server/git.aspx/PocketReferences/, return code 22
fatal: git-http-push failed

Antwoord 1, autoriteit 100%

Een specifiek certificaat permanent accepteren

Probeer http.sslCAPathof http.sslCAInfo. Adam Spiers’ antwoordgeeft een aantal geweldige voorbeelden. Dit is de veiligste oplossing voor de vraag.

TLS/SSL-verificatie uitschakelen voor een enkel git-commando

probeer -cdoor te geven aan gitmet de juiste configuratievariabele, of gebruik Flow’s antwoord:

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

SSL-verificatie uitschakelen voor een specifieke repository

Als u de repository volledig onder uw controle heeft, kunt u het volgende proberen:

git config --global http.sslVerify false

Er zijn nogal wat SSL-configuratie-opties in git. Van de man-pagina van 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.

Enkele andere handige SSL-configuratie-opties:

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.

Antwoord 2, autoriteit 13%

Je kunt GIT_SSL_NO_VERIFYinstellen op true:

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

of configureer Git om de verbinding niet te verifiëren op de opdrachtregel:

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

Houd er rekening mee dat als u geen SSL/TLS-certificaten verifieert, u vatbaar bent voor MitM-aanvallen.


Antwoord 3, autoriteit 11%

Ik ben geen grote fan van de [EDIT: originele versies van de]bestaande antwoorden, omdat het uitschakelen van beveiligingscontroles een laatste redmiddel zou moeten zijn, niet de eerste oplossing die wordt aangeboden. Ook al kun je zelfondertekende certificaten bij de eerste ontvangst niet vertrouwen zonder een extra verificatiemethode, het gebruik van het certificaat voor daaropvolgende git-bewerkingen maakt het leven in ieder geval een stuk moeilijker voor aanvallen die pas naje hebt het certificaat gedownload. Met andere woorden, als het certificaat dat u heeft gedownload echtecht is, dan zit u vanaf dat moment goed. Als u daarentegen verificatie gewoon uitschakelt, staat u op elk momentopen voor elke vorm van man-in-the-middle-aanval.

Om een specifiek voorbeeld te geven: de beroemde repo.or.czrepository biedt een zelfondertekend certificaat. Ik kan dat bestand downloaden, het ergens plaatsen zoals /etc/ssl/certs, en dan doen:

# 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

Merk op dat het gebruik van lokale git confighier (d.w.z. zonder --global) betekent dat dit zelfondertekende certificaat alleen wordt vertrouwd voor deze specifieke repository, wat prettig is. Het is ook leuker dan het gebruik van GIT_SSL_CAPATHomdat het het risico elimineert dat gitde verificatie uitvoert via een andere certificeringsinstantie die mogelijk in gevaar kan komen.


Antwoord 4

Dit antwoord is overgenomen uit dit artikelgeschreven door Michael Kauffman.

Git voor Windows gebruiken met een zakelijk SSL-certificaat

Probleem:

Als je een zakelijk SSL-certificaat hebt en je repo wilt klonen vanaf de console of VSCode, krijg je de volgende foutmelding:

fataal: geen toegang tot ‘https://myserver/tfs/DefaultCollection/_git/ Proj/‘: Probleem met SSL-certificaat: kan certificaat van lokale uitgever niet ophalen

Oplossing:

  1. Exporteer het zelfondertekende rootcertificaat naar een bestand. U kunt dit vanuit uw browser doen.

  2. Zoek het bestand “ca-bundle.crt” in uw git-map (huidige versie C:\Program Files\Git\usr\ssl\certs maar is in het verleden gewijzigd). Kopieer het bestand naar uw gebruikersprofiel. Open het met een teksteditor zoals VSCode en voeg de inhoud van uw geëxporteerde certificaat toe aan het einde van het bestand.

Nu moeten we git configureren om het nieuwe bestand te gebruiken:

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

Hiermee wordt het volgende item toegevoegd aan uw .gitconfig-bestand in de hoofdmap van uw gebruikersprofiel.

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


Antwoord 5

Ik blijf dit probleem tegenkomen, dus ik heb een script geschreven om het zelfondertekende certificaat van de server te downloaden en te installeren op ~/.gitcerts, en werk vervolgens git-config bij om naar deze certificaten te verwijzen. Het wordt opgeslagen in de globale configuratie, dus je hoeft het maar één keer per afstandsbediening uit te voeren.

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


Antwoord 6

SSL-verificatie uitschakelen voor een specifieke repository
Als de repository volledig onder jouw controle is, kun je het volgende proberen:

git config --global http.sslVerify false

Antwoord 7

Het is geen goede gewoonte om http.sslVerify op false in te stellen.
In plaats daarvan kunnen we een SSL-certificaat gebruiken.

De build-agent gebruikt dus https met SSL-certificaat en PAT voor authenticatie.
voer hier de afbeeldingsbeschrijving in

voer hier de afbeeldingsbeschrijving in

voer hier de afbeeldingsbeschrijving in

Kopieer de inhoud van het cer-bestand inclusief –begin—en –end–.

git bash op build-agent =>
git config –global http.sslcainfo “C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt”
Ga naar dit bestand en voeg de .cer-inhoud toe.

De build-agent heeft dus toegang tot het SSL-certificaat


Antwoord 8

Gebruik de 64-bits versie van Git op Windows, voeg gewoon het zelfondertekende CA-certificaat toe aan deze bestanden:

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

Als het slechts een zelfondertekend servercertificaat is, voeg het dan toe aan

  • C:\Program Files\Git\mingw64\ssl\cert.pem

Antwoord 9

Wees voorzichtig wanneer u één voering gebruikt met sslKey of sslCert, zoals in Josh Peak‘s antwoord:

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

Alleen Git 2.14.x/2.15 (Q3 2015) zou een pad zoals ~username/mykeycorrect kunnen interpreteren (terwijl het nog steeds een absoluut pad zoals /path/to/privatekey).

Zie commit 8d15496(20 juli 2017) door Junio C Hamano (gitster).
Geholpen door: Charles Bailey (hashpling).
(Samengevoegd door Junio C Hamano — gitsterin commit 17b1e1d, 11 aug 2017)

http.c: http.sslcerten http.sslkeyzijn beide padnamen

Toen het moderne http_options() codepad werd gemaakt om te ontleden
verschillende http.*-opties op 29508e1(“Gedeeld HTTP-verzoek isoleren
functionaliteit”, 18-11-2005, Git 0.99.9k), en werd later gecorrigeerd voor
interactie tussen de meerdere configuratiebestanden in 7059cd9
(“http_init(): parsering van configuratiebestanden repareren”, 2009-03-09, Git 1.6.3-rc0), we hebben geparseerd
configuratievariabelen zoals http.sslkey, http.sslcertals gewoon
vanilla strings, omdat git_config_pathname()dat begrijpt
Het voorvoegsel “~[username]/” bestond niet.

Later hebben we er een aantal geconverteerd (namelijk http.sslCAPathen http.sslCAInfo) om de functie te gebruiken, en variabelen toegevoegd zoals http.cookeyFilehttp.pinnedpubkeyom de functie vanaf het begin te gebruiken. Daarom begrijpen deze variabelen allemaal het voorvoegsel “~[username]/“.

Maak de overige twee variabelen, http.sslcerten http.sslkey, ook
bewust van de conventie, aangezien het beide duidelijk padnamen zijn naar
bestanden.


Antwoord 10

Controleer uw antivirus- en firewallinstellingen.

Van de ene op de andere dag werkte git niet meer. Met wat hierboven is beschreven, ontdekte ik dat Kaspersky een zelfondertekend persoonlijk rootcertificaat voor antivirusprogramma’s in het midden plaatst. Het is me niet gelukt om Git dat certificaat te laten accepteren volgens de bovenstaande instructies. Dat heb ik opgegeven. Wat voor mij werkt, is de functie uitschakelen om versleutelde verbindingen te scannen.

  1. Kaspersky openen
  2. Instellingen > Extra > Netwerk > Scan geen versleutelde verbindingen

Hierna werkt git weer met sslVerify ingeschakeld.

Opmerking. Dit geeft mij nog steeds geen voldoening, omdat ik die functie van mijn antivirusprogramma graag actief zou willen hebben. In de geavanceerde instellingen toont Kaspersky een lijst met websites die niet met die functie werken. Github wordt niet vermeld als een van hen. Ik zal eens kijken op het Kaspersky-forum. Er lijken enkele onderwerpen te zijn, b.v.
https ://forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211


Antwoord 11

Mijn antwoord is misschien laat, maar het werkte voor mij. Het kan iemand helpen.

Ik heb de bovengenoemde stappen geprobeerd en daarmee is het probleem niet opgelost.

probeer ditgit config --global http.sslVerify false


Antwoord 12

Op Windows werkte dit voor mij:

Voeg de inhoud van uw zelfondertekend certificaat toe aan het einde van het ca-bundle-bestand. Inclusief de regels —–BEGIN CERTIFICATE—–en —–END CERTIFICATE—–regels

De locatie van het ca-bundle-bestand is meestal C:\Program Files\Git\mingw64\ssl\certs

Voeg daarna het pad van het ca-bundlebestand toe aan de globale git config. Het volgende commando doet het: git config --global http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"

Opmerking: het pad hangt af van uw lokale pad van het ca-bundle-bestand!


Antwoord 13

In het .gitconfigbestand kun je de onderstaande waarde toevoegen om het zelfondertekende certificaat acceptabel te maken

sslCAInfo = /home/XXXX/abc.crt


Antwoord 14

Ik gebruik een Windows-machine en dit artikelheeft me geholpen. In feite opende ik ca-bundle.crt in Kladblok en voegde er kettingcertificaten aan toe (allemaal). Dit probleem doet zich meestal voor bij bedrijfsnetwerken waar tussenpersonen tussen systeem en git repo zitten. We moeten alle certificaten in de cert-keten exporteren, behalve leaf-cert in base 64-indeling en ze allemaal toevoegen aan ca-bundle.crt en vervolgens git configureren voor dit gewijzigde crt-bestand.


Antwoord 15

Ik doe het als volgt:

git init
git config --global http.sslVerify false
git clone https://myurl/myrepo.git

Antwoord 16

Het werkt voor mij, voer gewoon het volgende commando uit

git config --global http.sslVerify false

het opent een git-inloggegevensvenster en geef uw inloggegevens . voor de eerste keer vraagt het alleen

Other episodes