"Git kann unter Git mit Windows mit selbstsigniertem Zertifikat nicht aufgelöst werden"

282

Ich benutze Git unter Windows. Ich habe das msysGit-Paket installiert. Mein Test-Repository verfügt über ein selbstsigniertes Zertifikat auf dem Server. Ich kann ohne Probleme über HTTP auf das Repository zugreifen und es verwenden. Der Wechsel zu HTTPS führt zu folgendem Fehler:

Problem mit dem SSL-Zertifikat: Lokales Ausstellerzertifikat kann nicht abgerufen werden.

Ich habe das selbstsignierte Zertifikat in den vertrauenswürdigen Stammzertifizierungsstellen meines Windows 7-Client-Computers installiert. Ich kann in Internet Explorer ohne Fehlermeldungen zur URL des HTTPS-Repositorys navigieren.

In diesem Blogbeitrag von Philip Kelley wurde erklärt, dass cURL den Zertifikatspeicher des Clientcomputers nicht verwendet. Ich folgte dem Rat des Blogposts, eine private Kopie von curl-ca-bundle.crtGit zu erstellen und Git für die Verwendung zu konfigurieren. Ich bin sicher, dass Git meine Kopie verwendet. Wenn ich die Kopie umbenenne; Git beschwert sich, dass die Datei fehlt.

Ich habe mein Zertifikat eingefügt, wie im Blog-Beitrag erwähnt. Es wird weiterhin die Meldung "Lokales Ausstellerzertifikat kann nicht abgerufen werden" angezeigt.

Ich habe überprüft, ob Git noch funktioniert, indem ich ein GitHub-Repository über HTTPS geklont habe.

Das einzige , was ich sehe , dass auf die Blog - Post anders ist , ist , dass mein Zertifikat ist die Wurzel - es gibt keine Kette , es zu erreichen ist. Mein Zertifikat stammt ursprünglich aus dem Klicken auf den IIS8 IIS Manager-Link "Selbstsigniertes Zertifikat erstellen". Vielleicht unterscheidet sich ein Zertifikat dadurch in gewisser Weise von den Erwartungen von cURL.

Wie kann ich Git / cURL dazu bringen, das selbstsignierte Zertifikat zu akzeptieren?

RichardHowells
quelle
1
Überprüfen Sie auch, ob Ihr lokales Netzwerk Dateien in das Github-Repository übertragen darf. Möglicherweise gibt es eine Firewall- oder Antivireneinschränkung.
Shasi Kanth
Wenn bei der Verwendung von Bower jemand auf diesen Fehler stößt, erstellen Sie eine .bowerrc-Datei mit Inhalt { "strict-ssl": false }. Danke mir nicht, danke diesem Typen: stapp.space/fight-with-2 Ich habe fast 5 Stunden lang mit diesem Fehler gekämpft, gerade !!
Ganesh Jadhav

Antworten:

265

Öffnen Sie Git Bash und führen Sie den Befehl aus, wenn Sie die SSL-Überprüfung vollständig deaktivieren möchten.

git config --global http.sslVerify false

Hinweis: Diese Lösung kann Sie für Angriffe wie Man-in-the-Middle-Angriffe öffnen . Aktivieren Sie daher die Überprüfung so bald wie möglich erneut:

git config --global http.sslVerify true
Samir
quelle
69
Diese Antwort beeinträchtigt die Sicherheit von SSL, indem sie Man-in-the-Middle-Angriffe zulässt. In anderen Antworten wird bereits erläutert, wie Sie git so konfigurieren, dass es dem von Ihnen benötigten Zertifikat vertraut.
dsh
12
Eine schreckliche Antwort: Sie sagen ihnen nicht einmal, sie sollen SSL wieder einschalten. Aus diesem Grund treten Sicherheitslücken auf.
Edgar Aroutiounian
Wenn Sie Gitblit verwenden, gibt es keine andere Option als sshVerify false.
Samir
24
Verwenden Sie den folgenden Befehl, um die TLS / SSL-Überprüfung für einen einzelnen Git-Befehl zu deaktivieren:git -c http.sslVerify=false clone https://domain.com/path/to/git
Maxim Suslov
1
Im Folgenden werden bereits mehrere Lösungen bereitgestellt, und ich habe bereits die Nachteile vorgeschlagen. Es liegt also an Ihnen, welche Lösungen Sie auswählen, um das Problem zu beheben.
Samir
153

Das Problem ist, dass Git standardmäßig das Krypto-Backend "Linux" verwendet.

Ab Git für Windows 2.14 können Sie Git jetzt so konfigurieren, dass SChannel, die integrierte Windows-Netzwerkebene, als Krypto-Backend verwendet wird. Dies bedeutet, dass Sie den Windows-Zertifikatspeichermechanismus verwenden und den Curl-CA-Speichermechanismus nicht explizit konfigurieren müssen: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v= vs.85) .aspx

Einfach ausführen:

git config --global http.sslbackend schannel

Das sollte helfen.

Die Verwendung von Schannel ist mittlerweile die Standardeinstellung bei der Installation von Git für Windows. Es wird außerdem empfohlen, Repositorys nicht mehr per SSH auszuchecken, da https einfacher zu konfigurieren ist und weniger wahrscheinlich von einer Firewall blockiert wird. Dies bedeutet weniger Ausfallwahrscheinlichkeit.

Ihor Zenich
quelle
1
Beachten Sie jedoch, dass diese Lösung dazu führen kann, dass sie git config --global http.sslCAInfo <my-server-self-signed-cert.pem>nicht funktioniert. Ich habe http.sslCAInfodie Verwendung eines selbstsignierten Zertifikats für meinen Server konfiguriert und habe aus diesem Grund (möglicherweise nicht mit OP identisch) das Problem "SSL-Zertifikat: Lokales Ausstellerzertifikat kann nicht abgerufen werden" festgestellt, wenn ich z git clone https://github.com/Microsoft/vscode.git. Schließlich habe ich die Antwort von stackoverflow.com/a/47196562/1323552 (Ben PP Tung) verwendet, um meine sslCAInfo-Konfiguration für meinen Git-Server zu optimieren und zu lösen.
Johnny Wong
94

Ich hatte auch dieses Problem. In meinem Fall habe ich versucht, einen Git-Hook nach dem Empfang zu erhalten, um bei jedem Push eine Arbeitskopie auf einem Server zu aktualisieren. Es wurde versucht, den Anweisungen in dem Blog zu folgen, auf das Sie verlinkt haben. Hat auch bei mir nicht funktioniert und das Überschreiben der Einstellungen pro Benutzer schien auch nicht zu funktionieren.

Am Ende musste ich die SSL-Überprüfung (wie im Artikel erwähnt) für Git als Ganzes deaktivieren. Nicht die perfekte Lösung, aber es wird funktionieren, bis ich eine bessere herausfinden kann.

Ich habe die Git-Konfigurationstextdatei (mit meiner bevorzugten neutralen App mit Zeilenende wie Notepad ++) bearbeitet unter:

C: \ Programme (x86) \ Git \ etc \ gitconfig

Im Block [http] habe ich eine Option zum Deaktivieren von sslVerify hinzugefügt. Es sah so aus, als ich fertig war:

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

Das hat funktioniert.

HINWEIS:

  • Dies deaktiviert die SSL-Überprüfung und wird nicht als langfristige Lösung empfohlen.

  • Sie können dieses Pro-Repository deaktivieren, das immer noch nicht großartig ist, aber die Einstellung lokalisiert.

  • Mit dem Aufkommen von LetsEncrypt.org ist es nun ziemlich einfach, automatisiert und kostenlos, SSL als Alternative zu selbstsignierten Zertifikaten einzurichten, und die Notwendigkeit, sslVerify zu deaktivieren, entfällt.

Kiddailey
quelle
145
Dies macht den Zweck von SSL zunichte.
Syaz
49
Sie können den Befehl "git config --global http.sslVerify false" verwenden, um die SSL-Überprüfung zu deaktivieren
CleanCoder
6
Vielen Dank, dass Sie auf den sslCAinfoKonfigurationseintrag hingewiesen haben. Aber ich stimme der Antwort nicht zu, da es wenig sinnvoll ist, SSL für git systemweit dauerhaft zu deaktivieren (haben Sie versucht, es systemweit zu deaktivieren, dann zu klonen, dann wieder zu aktivieren und dann im zu deaktivieren? lokale Git-Konfiguration für das neu geklonte Repo?).
7heo.tk
35
Für einen einmaligen Befehl müssen die Konfigurationsdateien nicht geändert werden:git -c http.sslVerify=false clone https://...
pts
8
Besser hier beheben: blogs.msdn.microsoft.com/phkelley/2014/01/20/…
Warren P
51

kiddailey Ich denke, es war ziemlich nah dran, aber ich würde die SSL-Überprüfung nicht deaktivieren, sondern nur das lokale Zertifikat bereitstellen:

In der Git-Konfigurationsdatei

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

Oder über die Kommandozeile:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
Oliver
quelle
7
Auf Git für Windows ist diesgit config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
Karsten Tinnefeld
Oder für michgit config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
Sparrowt
Für Benutzer auf MacPorts ist diesgit config --global http.sslCAinfo /opt/local/share/curl/curl-ca-bundle.crt
miken32
3
Mit Git 2.8 können Sie git config --list --show-originsehen, wo die http.sslCAinfo-Konfiguration eingestellt ist
Anish
Mein Zertifikat Speicherort auf dem Mac ist: ~ / macports / share / curl / curl-ca-bundle.crt
user3282611
47

Ich habe mich auch diesem Problem gestellt. Und schließlich wurde durch die Anleitung von diesem MSDN-Blog gelöst .

Aktualisieren

Eigentlich müssen Sie das Zertifikat in der git-Zertifikatdatei curl-ca-bundel.cert hinzufügen, die sich im Verzeichnis Git \ bin befindet.

Schritte

  1. Öffnen Sie Ihre Github-Seite im Browser und klicken Sie auf das Schlosssymbol in der Adressleiste.
  2. Navigieren Sie im geöffneten kleinen Popup zum Link "Zertifikat anzeigen". Daraufhin wird ein Popup-Fenster geöffnet.
  3. In welcher navigieren Sie zur Registerkarte Zertifikate (3. in meinem Fall). Wählen Sie den obersten Knoten aus, der das Stammzertifikat ist. Klicken Sie unten auf die Schaltfläche Zertifikat kopieren und speichern Sie die Datei.
  4. Navigieren Sie im Datei-Explorer zum Verzeichnis Git \ bin und öffnen Sie curl-ca-bundle.crt im Texteditor.
  5. Öffnen Sie die exportierte Zertifikatdatei (in Schritt 3) auch im Texteditor.
  6. Kopieren Sie den gesamten Inhalt des exportierten Zertifikats bis zum Ende von curl-ca-bundle.crt und speichern Sie ihn.

Überprüfen Sie abschließend den Status. Bitte beachten Sie, dass Sie die Datei curl-ca-bundle.crt vor dem Bearbeiten sichern, um auf der sicheren Seite zu bleiben.

Nadeem Jamali
quelle
3
"Navigiere im Git \ bin-Verzeichnis und öffne curl-ca-bundle.crt" Es gibt keine curl-ca-bundle.crt im git \ bin!
Anton K
@AntonK Wenn es nicht existiert, erstellen Sie selbst eines im Editor und benennen Sie es mit curl-ca-bundle.crt um. Andere Schritte bleiben gleich.
Nadeem Jamali
16
@AntonK Es kann nur aufgerufen werden ca-bundle.crtund sich in mingw64\ssl\certsoder befinden mingw32\ssl\certs.
Ian Kemp
Verwendet dies für Atlassians SourceTree. Die mitgelieferte GIT-Installation befindet sich in% userprofile% \ appdata \ local \ attlassian \ sourcetree \ git_local. curl-ca-bundle.crt war bereits vorhanden und hat mein Base64-codiertes exportiertes Stammzertifikat angehängt.
Xanothos
40

Die Antwort auf diese Frage mit makecert for Development SSL hat dies für mich behoben.

Ich weiß nicht warum, aber das Zertifikat, das über den einfachen Link "Selbstsigniertes Zertifikat erstellen" in IIS Manager erstellt wurde, reicht nicht aus. Ich folgte dem Ansatz in der verknüpften Frage zum Erstellen und Installieren eines selbstsignierten CA-Stamms. Verwenden Sie diese Option, um ein Serverauthentifizierungszertifikat für meinen Server auszustellen. Ich habe beide in IIS installiert.

Damit ist meine Situation dieselbe wie in dem Blog-Beitrag, auf den in der ursprünglichen Frage verwiesen wird. Sobald das Stammzertifikat kopiert / in curl-ca-bundle.crt eingefügt wurde, war die Kombination aus git und curl erfüllt.

RichardHowells
quelle
"Ich weiß nicht warum, aber das Zertifikat, das über den einfachen Link" Selbstsigniertes Zertifikat erstellen "in IIS Manager erstellt wurde, reicht nicht aus ..." - Soweit ich das beurteilen kann, werden fehlerhafte Zertifikate erstellt. Beim Erstellen von X.509-Zertifikaten gelten viele Regeln. Das "Mach das Minimum, damit es funktioniert" funktioniert nicht mehr gut. Siehe auch Wie signiere ich eine Zertifikatsignierungsanforderung bei Ihrer Zertifizierungsstelle und wie erstelle
JWW
Dies funktionierte für mich, aber ich wurde vorübergehend auf den Teil "Ich habe beide in IIS installiert" gelegt. Um für andere zu sorgen ... wird das Serverzertifikat in IIS zugewiesen, und die Stammzertifizierungsstelle muss über das Windows-Dienstprogramm zum Zertifikatmanager (certmgr.msc) in "Vertrauenswürdige Stammzertifizierungsstellen" importiert werden
Philip
26

Um zu vermeiden, dass die SSL-Überprüfung vollständig deaktiviert oder die von git verwendete gebündelte CA-Zertifikatdatei dupliziert / gehackt wird, können Sie die Zertifikatkette des Hosts in eine Datei exportieren und git dazu bringen, sie zu verwenden:

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

Wenn dies nicht funktioniert, können Sie die SSL-Überprüfung nur für den Host deaktivieren :

git config --global http.https://the.host.com/.sslVerify false

Hinweis: Vorbehaltlich möglicher Angriffe von Mann in der Mitte, wenn die SSL-Überprüfung deaktiviert ist.

Zionyx
quelle
4
Es kann erwähnenswert sein, dass die --globalOption nicht erforderlich ist: Wenn Sie sie weglassen --global, gilt die Einstellung nur für dieses bestimmte Git-Repo.
Wes Turner
19

Ich hatte gerade das gleiche Problem, aber ich verwende Sourcetree unter Windows. Gleiche Schritte auch für normales GIT unter Windows. Mit den folgenden Schritten konnte ich dieses Problem lösen.

  1. Beziehen Sie den Serverzertifikatbaum. Dies kann mit Chrome erfolgen. Navigieren Sie zur Serveradresse. Klicken Sie auf das Vorhängeschlosssymbol und zeigen Sie die Zertifikate an. Exportieren Sie die gesamte Zertifikatkette als PEM-Format (Base64-codierte Dateien).
  2. Fügen Sie die Zertifikate zur Vertrauenskette Ihrer GIT-Vertrauenskonfigurationsdatei hinzu. Führen Sie "git config --list" aus. Suchen Sie die Konfiguration "http.sslcainfo". Hier wird angezeigt, wo sich die Zertifikat-Vertrauensdatei befindet. Kopieren Sie alle Zertifikate in die Vertrauenskettendatei, einschließlich "- -BEGIN- -" und "- -END- -".
  3. Stellen Sie sicher, dass Sie die gesamte Zertifikatkette zur Zertifikatdatei hinzufügen

Dies sollte Ihr Problem mit den selbstsignierten Zertifikaten und der Verwendung von GIT lösen.

Ich habe versucht, die Konfiguration "http.sslcapath" zu verwenden, aber dies hat nicht funktioniert. Auch wenn ich nicht die gesamte Kette in die Zertifikatsdatei aufgenommen hätte, wäre dies ebenfalls fehlgeschlagen. Wenn jemand Hinweise dazu hat, lassen Sie es mich bitte wissen, da das oben Gesagte für eine neue Installation wiederholt werden muss.

Wenn dies die System-GIT ist, können Sie die Optionen auf der Registerkarte WERKZEUGE -> Optionen GIt verwenden, um die System-GIT zu verwenden. Dadurch wird das Problem auch im Quellenbaum gelöst.

JamesD
quelle
2
"Wenn ich nicht die gesamte Kette in die Zertifikatsdatei aufnehmen würde, würde dies ebenfalls fehlschlagen" - Ich bin gerade auf dieses Problem
gestoßen
Was die gesamte Kette betrifft, habe ich zwei Zertifikate über dem Github-Zertifikat. Füge ich sie in der Reihenfolge als root-> next cert-> github cert in die Datei sslcainfo.crt ein?
Jecoms
Ich konnte auf Git-Repo-Pakete zugreifen, indem ich nur das Stammzertifikat hinzufügte.
Jecoms
Für zukünftige Leser. Keine Ahnung, ob es wichtig ist, aber ich habe das "oberste" (oberste) Zertifikat am Ende der Datei (http.sslcainfo) abgelegt. Und als ich mich dann vom Stammzertifikat in der Kette entfernte, setzte ich dieses Zertifikat über den vorherigen Eintrag der Datei (http.sslcainfo).
GranadaCoder
11

Im Fall von Github-Repositorys (oder nicht selbstsignierten Zertifikaten) wurde das Problem behoben , indem Sie bei der Installation von Git-on-Windows unten eine Auswahl treffen .

Geben Sie hier die Bildbeschreibung ein

Jawad Al Shaikh
quelle
1
Sie schienen eine andere Frage beantwortet zu haben. Die Frage des OP betraf selbstsignierte Zertifikate auf Windows-Clients.
JWW
@jww der Fragentitel ist eine Git-Fehlermeldung, die angezeigt wird, auch wenn Repo NICHT selbstsigniertes SSL ist!
Jawad Al Shaikh
Dadurch habe ich den Fehler bestanden, aber für den Zugriff auf GitHub Enterprise war eine Schlüsselgenerierung und das Hinzufügen von öffentlichen / privaten Schlüsseln erforderlich.
ΩmegaMan
1
Wenn das selbstsignierte Zertifikat von einem hilfreichen Windows-Administrator über eine Gruppenrichtlinie in den Windows-Zertifikatspeicher gestellt wurde, ist diese Antwort ebenfalls gut.
JamesD
7

Ich hatte dieses Problem schon einmal und löse es mit der folgenden Konfiguration.

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

Seit Git 2.3.1 können Sie https://your.domainnach http setzen, um anzugeben, dass das folgende Zertifikat nur für dieses Zertifikat bestimmt ist.

Ben PP Tung
quelle
1
Dies ist die einfachste und präziseste Lösung, die ich gefunden habe, wenn Sie sie auch git config --global http.sslCAInfo <your-server-self-signed-cert.pem>zuvor konfiguriert haben (was den Fehler verursacht, dass das Zertifikat des lokalen Ausstellers nicht abgerufen werden kann)
Johnny Wong
Dies war die richtige Antwort auf mein Problem (und nicht einfach "Deaktivieren der SSL-Validierung" ~~). Wusste nicht, dass Sie den Speicherort des Zertifikats nur für einen bestimmten Host angeben können. As!
Rocío García Luque
1
  1. Laden Sie das Zertifikat über diesen Link herunter: https://github.com/bagder/ca-bundle
  2. Fügen Sie es zu C:\Program Files\Git\bin und hinzuC:\Program Files\Git\mingw64\bin

Dann versuchen Sie etwas wie: git clone https://github.com/heroku/node-js-getting-started.git

Alex
quelle
1

Eine Sache, die mich durcheinander gebracht hat, war das Format des Pfades (auf meinem Windows-PC). Ich hatte ursprünglich das:

git config --global http.sslCAInfo C:\certs\cacert.pem

Dies schlug jedoch mit dem Fehler "Lokales Ausstellerzertifikat kann nicht abgerufen werden" fehl.

Was schließlich funktionierte, war Folgendes:

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"
Wayne S.
quelle
1

In meinem Fall wird beim Installieren des ConEmu-Terminals für Windows 7 das ca-bundlewährend der Installation unter erstellt C:\Program Files\Git\mingw64\ssl\certs.

Daher muss ich die folgenden Befehle auf dem Terminal ausführen, damit es funktioniert:

$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

Daher C:\Program Files\Git\etc\gitconfigenthält meine Folgendes:

[http]
    sslBackend = schannel
    sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt

Außerdem habe ich bei der Installation des Git dieselbe Option wie hier erwähnt gewählt .

Ich hoffe, das hilft!

rc.adhikari
quelle
1

So beheben Sie das Problem mit dem spezifischen Fehler SSL-Zertifikat: Das lokale Ausstellerzertifikat kann in git nicht abgerufen werden

Ich hatte das gleiche Problem mit Let's Encrypt-Zertifikaten.

Eine Website mit https, die wir nur brauchen:

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

aber git pull sagt:

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

Um dies zu beheben, müssen wir außerdem Folgendes hinzufügen:

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
Sérgio
quelle
-5

Verwenden Sie diesen Befehl, bevor Sie Composer Update / Install ausführen:

git config --global http.sslverify false
Prashant Paliwal
quelle