it-swarm.com.de

"Kann lokales Ausstellerzertifikat nicht abrufen" kann mit git unter Windows mit selbstsigniertem Zertifikat nicht behoben werden

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 über http problemlos auf das Repository zugreifen und es verwenden. Wenn Sie zu https wechseln, wird der Fehler "Problem mit dem SSL-Zertifikat: Lokales Ausstellerzertifikat kann nicht abgerufen werden" angezeigt.

Ich habe das selbstsignierte Zertifikat in den vertrauenswürdigen Stammzertifizierungsstellen meines Windows 7-Clientcomputers installiert. Ich kann in Internet Explorer ohne Fehlermeldungen zur https-Repository-URL navigieren.

Dieser Blog http://blogs.msdn.com/b/phkelley/archive/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exe- s-store.aspx erklärte, dass curl den Zertifikatspeicher des Clientcomputers nicht verwendet. Ich bin dem Rat des Blogposts gefolgt, eine private Kopie von curl-ca-bundle.crt zu erstellen und git für die Verwendung zu konfigurieren. Ich bin sicher, dass git meine Kopie benutzt. Wenn ich die Kopie umbenenne; Git beschwert sich, dass die Datei fehlt.

Ich habe mein Zertifikat eingefügt, wie im Blogeintrag erwähnt. Trotzdem wird die Meldung "Kann lokales Ausstellerzertifikat nicht abrufen" angezeigt.

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

Das einzige, was ich anders sehe als der Blog-Beitrag, ist, dass mein Zertifikat IS die Wurzel ist - es gibt keine Kette, um es zu erreichen. Mein Zertifikat stammt ursprünglich aus dem Klicken auf den Link "IIS8 IIS Manager" "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?

224
RichardHowells

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

Ich weiß nicht warum, aber das Zertifikat, das über den einfachen Link "Selbst signiertes Zertifikat erstellen" in IIS Manager erstellt wurde, reicht nicht aus. Ich habe den Ansatz in der verknüpften Frage des Erstellens und Installierens eines selbstsignierten CA-Stamms befolgt. Verwenden Sie diese dann, um ein Serverauthentifizierungszertifikat für meinen Server auszustellen. Ich habe beide in IIS installiert.

Das entspricht meiner Situation in etwa der des Blogposts, auf den in der ursprünglichen Frage verwiesen wurde. Sobald das Stammzertifikat in curl-ca-bundle.crt kopiert/eingefügt wurde, war die Kombination aus Git/Curl zufriedenstellend.

39
RichardHowells

Ö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 zu Angriffen wie Man-in-the-Middle-Angriffen führen.. Aktivieren Sie daher die Überprüfung so bald wie möglich erneut:

git config --global http.sslVerify true
205
Samir

Ich hatte auch dieses Problem. In meinem Fall habe ich versucht, einen Git-Hook nach dem Empfang abzurufen, um bei jedem Push eine Arbeitskopie auf einem Server zu aktualisieren. Es wurde versucht, die Anweisungen in dem Blog zu befolgen, mit dem Sie verlinkt sind. Funktionierte auch nicht für mich und das Überschreiben der Einstellungen auf Benutzerbasis 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-Konfigurations-Textdatei (mit meiner bevorzugten neutralen App für Zeilenenden wie Notepad ++) bearbeitet. Sie befindet sich unter:

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

Im [http] -Block 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 den Trick gemacht.

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

89
kiddailey

Das Problem ist, dass Git standardmäßig das "Linux" -Krypto-Backend 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

Führen Sie einfach Folgendes aus:

git config --global http.sslbackend schannel

Das sollte helfen.

Die Standardeinstellung bei der Installation von Git für Windows ist Schannel. Außerdem wird empfohlen, Repositorys nach Möglichkeit nicht mehr über SSH auszuchecken, da https einfacher zu konfigurieren ist und weniger wahrscheinlich von einer Firewall blockiert wird.

65
Ihor Zenich

kiddailey Ich denke 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
45
Oliver

Ich war auch mit diesem Problem konfrontiert. Und schließlich wurde gelöst, indem die Anleitung von diesem MSDN-Blog eingeholt wurde.

Update

Tatsächlich müssen Sie das Zertifikat in die Zertifikatsdatei curl-ca-bundel.cert von git einfü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 in dem kleinen Popup-Fenster zum Link "Zertifikat anzeigen", um ein Popup-Fenster zu öffnen.
  3. In welcher navigieren Sie zu Zertifikate Registerkarte (3. in meinem Fall). Wählen Sie den obersten Knoten aus, bei dem es sich um das Stammzertifikat handelt. Und drücken Sie die Schaltfläche Zertifikat kopieren unten und speichern Sie die Datei.
  4. Navigieren Sie im Datei-Explorer zum Verzeichnis Git\bin und öffnen Sie die Datei 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 die Sicherungsdatei curl-ca-bundle.crt vor der Bearbeitung auf der sicheren Seite bleibt.

39
Nadeem Jamali

Um zu vermeiden, dass die SSL-Überprüfung vollständig deaktiviert oder die von git verwendete 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 das nicht funktioniert, können Sie die SSL-Überprüfung deaktivieren nur für den Host:

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

Hinweis: Unterliegt möglichen Man-in-the-Middle-Angriffen, wenn die SSL-Überprüfung deaktiviert ist.

24
zionyx

Ich hatte nur das gleiche Problem, benutze aber sourcetree unter Windows. Dieselben Schritte auch für normales GIT unter Windows. Nach den folgenden Schritten konnte ich dieses Problem lösen.

  1. Abrufen des Serverzertifikatbaums Dies kann mit Chrome erfolgen. Navigieren Sie zu Serveradresse. Klicken Sie auf das Schlosssymbol und sehen Sie sich die Zertifikate an. Exportieren Sie die gesamte Zertifikatskette im PEM-Format (Base64-codierte Dateien).
  2. Fügen Sie die Zertifikate der Vertrauenskette Ihrer GIT-Vertrauenskonfigurationsdatei hinzu. Führen Sie "git config --list" aus. Suchen Sie die "http.sslcainfo" -Konfiguration. Hier wird angezeigt, wo sich die Zertifikatvertrauensdatei befindet. Kopieren Sie alle Zertifikate in die Trust Chain-Datei, einschließlich "- -BEGIN- -" und "- -END- -".
  3. Stellen Sie sicher, dass Sie der Zertifikatsdatei die gesamte Zertifikatskette hinzufügen

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

Ich habe versucht, die "http.sslcapath" -Konfiguration zu verwenden, aber das hat nicht funktioniert. Auch wenn ich nicht die gesamte Kette in die Zertifikatsdatei aufnehmen würde, würde dies ebenfalls fehlschlagen. Wenn jemand einen Hinweis darauf hat, lass es mich bitte wissen, da der obige Vorgang für eine neue Installation wiederholt werden muss.

Wenn dies die System-GIT ist, können Sie die Optionen in TOOLS -> Registerkarte options GIT verwenden, um die System-GIT zu verwenden. Dadurch wird das Problem auch in sourcetree behoben.

18
JamesD

Im Fall von github-Repositorys (oder nicht selbstsignierten Zertifikaten) wurde das Problem behoben, indem Sie bei der Installation von Git-on-Windows die unten stehende Option auswählen.

enter image description here

7
Jawad Al Shaikh

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.domain nach http setzen, um anzugeben, dass das folgende Zertifikat nur für dieses Zertifikat gilt.

4
Ben P.P. Tung
  1. Zertifikat von diesem Link herunterladen: https://github.com/bagder/ca-bundle
  2. Füge es zu C:\Program Files\Git\bin und C:\Program Files\Git\mingw64\bin hinzu

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

1
Alex

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

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

Dies schlug jedoch mit dem Fehler fehl, dass das Zertifikat des lokalen Ausstellers nicht abgerufen werden konnte.

Was schließlich funktionierte, war Folgendes:

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