680 Stimmen

Nicht in der Lage, "unable to get local issuer certificate" mit git unter Windows und einem selbstsignierten Zertifikat zu lösen

Ich benutze Git unter Windows. Ich habe das msysGit-Paket installiert. Mein Test-Repository hat ein selbst signiertes Zertifikat auf dem Server. Ich kann auf das Repository über HTTP zugreifen und es verwenden, ohne Probleme zu haben. Beim Wechsel zu HTTPS tritt der Fehler auf:

SSL-Zertifikatsproblem: Es konnte kein lokales Aussteller-Zertifikat erhalten werden.

Ich habe das selbst signierte Zertifikat im Vertrauenswürdige Stammzertifizierungsstellen meines Windows 7-Client-Rechners installiert. Ich kann ohne Fehlermeldungen zur HTTPS-Repository-URL im Internet Explorer navigieren.

Dieser Blog-Beitrag von Philip Kelley erklärte, dass cURL den Zertifikatspeicher des Client-Rechners nicht verwendet. Ich habe den Ratschlägen des Blog-Beitrags befolgt, um eine private Kopie von curl-ca-bundle.crt zu erstellen und Git so zu konfigurieren, dass es diese verwendet. Ich bin sicher, dass Git meine Kopie verwendet. Wenn ich die Kopie umbenenne, beschwert sich Git, dass die Datei fehlt.

Ich habe mein Zertifikat, wie im Blog-Beitrag erwähnt, eingefügt, bekomme aber immer noch die Meldung "Es konnte kein lokales Aussteller-Zertifikat erhalten werden".

Ich habe überprüft, dass Git immer noch funktioniert, indem ich ein GitHub-Repository über HTTPS klonen.

Das einzige, was ich sehe, das sich von dem Blog-Beitrag unterscheidet, ist, dass mein Zertifikat tatsächlich das Stammzertifikat ist - es gibt keine Kette, um es zu erreichen. Mein Zertifikat stammt ursprünglich vom Klicken auf den IIS8 IIS-Manager-Link 'Selbstsigniertes Zertifikat erstellen'. Vielleicht macht das ein Zertifikat auf irgendeine Weise anders als das, was cURL erwartet.

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

913voto

Ihor Zenich Punkte 7587

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

Ab Git für Windows 2.14 können Sie jetzt Git so konfigurieren, dass es SChannel, die integrierte Windows-Netzwerk-Schicht, als Crypto-Backend verwendet. Das bedeutet, dass es den Mechanismus des Windows-Zertifikatspeichers verwendet und Sie den curl-CA-Speichermechanismus nicht explizit konfigurieren müssen: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs.85).aspx

Führen Sie einfach aus:

git config --global http.sslbackend schannel

Das sollte helfen.

Die Verwendung von SChannel ist mittlerweile die Standardkonfiguration bei der Installation von Git für Windows. Es wird außerdem empfohlen, wenn möglich keine Repositories mehr über SSH auszuchecken, da HTTPS einfacher zu konfigurieren ist und weniger wahrscheinlich ist, dass es von einer Firewall blockiert wird, was weniger Ausfallrisiko bedeutet.

486voto

Samir Punkte 6352

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

git config --global http.sslVerify false

Hinweis: Diese Lösung öffnet Sie Angriffen wie Man-in-the-Middle-Angriffen. Aktivieren Sie daher so schnell wie möglich die Verifikation wieder:

git config --global http.sslVerify true

98voto

kiddailey Punkte 3077

Ich hatte dieses Problem auch. In meinem Fall habe ich versucht, einen post-receive-Git-Hook zu verwenden, um bei jedem Push eine Arbeitskopie auf einem Server zu aktualisieren. Ich habe versucht, den Anweisungen im von Ihnen verlinkten Blog zu folgen. Bei mir hat es auch nicht funktioniert, und das Überschreiben der Einstellungen auf Benutzerebene schien auch nicht zu funktionieren.

Letztendlich musste ich die SSL-Überprüfung für Git insgesamt deaktivieren, wie im Artikel erwähnt. Es ist vielleicht nicht die perfekte Lösung, aber es funktioniert, bis ich eine bessere finde.

Ich habe die Git-Konfigurationstextdatei (mit meiner favorisierten App ohne Zeilenenden wie Notepad++) bearbeitet, die sich hier befindet:

C:\Program Files (x86)\Git\etc\gitconfig

Im [http]-Block habe ich eine Option hinzugefügt, um sslVerify zu deaktivieren. Es sah so aus, als ich fertig war:

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

Das hat den Trick gemacht.

HINWEIS:

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

  • Sie können dies pro Repository deaktivieren, was immer noch nicht ideal ist, aber die Einstellung lokalisiert.

  • Mit der Einführung von LetsEncrypt.org ist es jetzt ziemlich einfach, automatisiert und kostenlos, SSL als Alternative zu selbst signierten Zertifikaten einzurichten, und macht die Deaktivierung von sslVerify überflüssig.

74voto

Oliver Punkte 33151

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

In der Git-Konfigurationsdatei

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

Oder über die Befehlszeile:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt

64voto

Nadeem Jamali Punkte 1273

Ich bin auch auf dieses Problem gestoßen. Und habe schließlich Hilfe von diesem MSDN-Blog gefunden.

Update

Tatsächlich müssen Sie das Zertifikat in die Zertifikatsdatei von git curl-ca-bundle.crt im Verzeichnis Git\bin hinzufügen.

Schritte

  1. Öffnen Sie Ihre Github-Seite im Browser und klicken Sie auf das Schlosssymbol in der Adressleiste.
  2. In dem geöffneten Popup gehen Sie zum Link 'Zertifikat anzeigen', es wird ein Popup-Fenster geöffnet.
  3. Dort gehen Sie zum Register Zertifikate (in meinem Fall das 3.). Wählen Sie den obersten Knoten, das ist das Stammzertifikat. Und drücken Sie den Zertifikat kopieren Button unten und speichern Sie die Datei.
  4. Im Datei-Explorer navigieren Sie zum Verzeichnis Git\bin und öffnen Sie die Datei curl-ca-bundle.crt im Texteditor.
  5. Öffnen Sie auch die exportierte Zertifikatsdatei (im Schritt 3) im Texteditor.
  6. Kopieren Sie den gesamten Inhalt aus dem exportierten Zertifikat bis zum Ende von curl-ca-bundle.crt und speichern Sie.

Überprüfen Sie schließlich den Status. Bitte beachten Sie, dass Sie die Datei curl-ca-bundle.crt vor dem Bearbeiten zur Sicherheit sichern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X