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?

48voto

RichardHowells Punkte 6226

Ein Antwort zu Using makecert for Development SSL hat das Problem für mich behoben.

Ich weiß nicht warum, aber das Zertifikat, das durch den einfachen Link 'Selbstsigniertes Zertifikat erstellen' im IIS-Manager erstellt wird, funktioniert nicht. Ich habe den Ansatz in der verlinkten Frage befolgt, selbst eine CA-Root zu erstellen und zu installieren; dann einen Server-Authentifizierungs-Zertifikat für meinen Server auszustellen. Beide habe ich im IIS installiert.

Das hat meine Situation mit dem Blogbeitrag in der Ursprungsfrage vergleichbar gemacht. Sobald das Stammzertifikat in curl-ca-bundle.crt kopiert und eingefügt wurde, waren das git/curl-Kombination zufrieden.

42voto

Jawad Al Shaikh Punkte 2305

Im Falle von github-Repositorys (oder anderen nicht selbst signierten Zertifikaten) wurde das Problem beim Installieren von Git unter Windows durch die Auswahl unten behoben.

Bildbeschreibung hier eingeben

36voto

zionyx Punkte 1677

Um das Deaktivieren der SSL-Überprüfung vollständig zu vermeiden oder die gebündelte CA-Zertifikatsdatei, die von git verwendet wird, nicht zu duplizieren/hacken, können Sie die Zertifikatskette des Hosts in eine Datei exportieren und git dazu 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 nur für den Host deaktivieren:

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

Hinweis: Bei deaktivierter SSL-Überprüfung besteht die Möglichkeit von Man-in-the-Middle-Angriffen.

32voto

Paul Jason Punkte 321

Um die Zusammenfassung aller oben genannten Antworten vollständig darzustellen.

Grund

Dieses Problem tritt auf, weil git den https-Handshake mit dem git-Server, auf dem das Repository, auf das zugegriffen werden soll, nicht abschließen kann.

Lösung

Schritte zum Abrufen des Zertifikats vom GitHub-Server

  1. Öffnen Sie den GitHub-Link, auf den Sie zugreifen möchten, im Browser
  2. Klicken Sie auf das Schlosssymbol in der Adressleiste > klicken Sie auf 'Zertifikat'
  3. Wechseln Sie zum Tab 'Zertifikatpfad' > wählen Sie den obersten Knoten in der Zertifikathierarchie aus > klicken Sie auf 'Zertifikat anzeigen'
  4. Klicken Sie nun auf 'Details' > und auf 'Datei kopieren..' > Klicken Sie auf 'Weiter' > Wählen Sie 'Base 64-kodiertes X509 (.CER)' > speichern Sie es an einem beliebigen Speicherort.

Schritte zum Hinzufügen des Zertifikats zum lokalen Git-Zertifikatsspeicher

  1. Öffnen Sie das Zertifikat, das Sie im Notepad gespeichert haben, und kopieren Sie den Inhalt inklusive --Beginn Zertifikat-- und --Ende Zertifikat--

  2. Um den Pfad zu finden, in dem alle Zertifikate für Ihr Git gespeichert sind, führen Sie den folgenden Befehl in cmd aus.

    git config --list

  3. Überprüfen Sie den Schlüssel 'http.sslcainfo', der entsprechende Wert ist der Pfad.

Hinweis: Wenn Sie den Schlüssel http.sslcainfo nicht finden können, suchen Sie nach dem Standardpfad von Git: C:\Program Files\Git\mingw64\ssl\certs

  1. Öffnen Sie nun 'ca-bundle.crt' in diesem Pfad.

Hinweis 1: Öffnen Sie diese Datei im Administratormodus, da Sie sie sonst nach dem Update nicht speichern können. (Tipp - Sie können Notepad++ zu diesem Zweck verwenden)

Hinweis 2: Bevor Sie diese Datei ändern, machen Sie bitte anderswo eine Sicherungskopie.

  1. Kopieren Sie nun den Inhalt der Datei aus Schritt 1 in die Datei aus Schritt 4 am Ende der Datei, so wie andere Zertifikate in ca-bundle.crt platziert sind.
  2. Öffnen Sie nun ein neues Terminal und Sie sollten jetzt in der Lage sein, Operationen bezüglich des git-Servers über https auszuführen.

25voto

JamesD Punkte 2286

Ich hatte gerade das gleiche Problem, aber bei der Verwendung von Sourcetree unter Windows. Die gleichen Schritte gelten auch für normales GIT unter Windows. Durch die folgenden Schritte konnte ich dieses Problem lösen.

  1. Beschaffen Sie den Serverzertifikatbaum Dies kann mit Chrome erledigt werden. Navigieren Sie zur Serveradresse. Klicken Sie auf das Vorhängeschloss-Symbol und zeigen Sie die Zertifikate an. Exportieren Sie die gesamte Zertifikatskette als Base64-kodierte Dateien im PEM-Format.
  2. Fügen Sie die Zertifikate der Vertrauenskette Ihrer GIT-Vertrauenskonfigurationsdatei hinzu Führen Sie "git config --list" aus. Suchen Sie die Konfiguration "http.sslcainfo", die anzeigt, wo sich die Zertifikatvertrauensdatei befindet. Kopieren Sie alle Zertifikate in die Vertrauenskettendatei, einschließlich des "-BEGIN-" und des "-END-".
  3. Vergewissern Sie sich, dass Sie die gesamte Zertifikatskette zur Zertifikatsdatei hinzufügen

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

Ich habe versucht, die Konfiguration "http.sslcapath" zu verwenden, aber das hat nicht funktioniert. Außerdem würde es fehlschlagen, wenn ich die gesamte Kette nicht in die Zertifikatsdatei aufgenommen hätte. Wenn jemand Hinweise dazu hat, lassen Sie es mich bitte wissen, da das Obige für eine Neuinstallation wiederholt werden muss.

Wenn dies das System-GIT ist, können Sie die Optionen unter TOOLS -> Optionen GITHUB-Registerkarte verwenden, um das System-GIT zu verwenden, und damit wird das Problem auch in Sourcetree gelöst.

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