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?

19voto

Nirbhay Jha Punkte 461

Bei der Verwendung von Windows liegt das Problem darin, dass git standardmäßig das "Linux" Crypto-Backend verwendet. Ab Git für Windows 2.14 können Sie Git so konfigurieren, dass SChannel, die integrierte Windows-Netzwerkschicht, als Crypto-Backend verwendet wird. Führen Sie dazu einfach den folgenden Befehl im GIT-Client aus:

git config --global http.sslbackend schannel

Dies bedeutet, dass es den Windows-Zertifikatspeichermechanismus verwendet und Sie den curl-CA-Speicher (http.sslCAInfo) nicht explizit konfigurieren müssen.

15voto

Ben P.P. Tung Punkte 1164

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

[http "https://deine.domain"] sslCAInfo=/pfad/zum/deiner/domain/priviate-zertifikat

Seit git 2.3.1 kannst du https://deine.domain nach http einfügen, um anzuzeigen, dass das folgende Zertifikat nur für sie gilt.

12voto

veenz Punkte 121

Jan 2021 - Konnte dies in VS2019 umgehen, indem ich unter Menü > Git > Einstellungen > Git-Globale Einstellungen > Kryptografischer Netzwerkprovider > [Secure Channel] anstelle von [OpenSSL] eingestellt habe

Git SSL-Zertifikatsproblem konnte keine lokale Ausstellerbescheinigung erhalten (Behebung)

PS: Musste weder --global noch --local http.sslVerify false setzen. Ich habe ein Azure DevOps-Repo geklont, das keine selbst signierten Zertifikate verwendet hat. Dies scheint ein Problem entweder mit VS2019 oder Git für Windows zu sein. Sie müssen es beheben !!

11voto

rc.adhikari Punkte 1626

In meinem Fall habe ich den ConEmu Terminal für Windows 7 installiert, der während der Installation das ca-bundle unter C:\Program Files\Git\mingw64\ssl\certs erstellt.

Daher mun ich die folgenden Befehle im Terminal ausführen, um es zum Laufen zu bringen:

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

Daher enthält meine C:\Program Files\Git\etc\gitconfig das Folgende:

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

Außerdem habe ich die gleiche Option wie hier erwält bei der Installation von Git.

Ich hoffe, das hilft!

9voto

Peter Haddad Punkte 78256

Ich habe dieses Problem kürzlich auch erlebt, und normalerweise tritt dieses Problem auf, wenn Sie hinter einer Unternehmens-Firewall stehen und Git dann den HTTPS-Handshake mit dem Git-Repository, auf das Sie zugreifen möchten, nicht abschließen kann. Eine Möglichkeit, es zu lösen, besteht darin, diesen Befehl zu verwenden:

git config --global http.sslverify false

Aber wie andere bereits gesagt haben, deaktiviert dies im Grunde die SSL-Verifizierung. Der einzige sichere Weg besteht darin, das SSL-Zertifikat zu erhalten und es lokal zu Ihrem Git-Ordner hinzuzufügen, speziell in der Datei ca-bundle.crt.

Eine Möglichkeit, es zu lösen, besteht darin, das Paket pcer zu nutzen. Um es zu installieren, müssen Sie folgendes tun:

npm i -g pcer

Dann führen Sie folgendes aus:

pcer alias git "C:\Program Files\Git\mingw64\etc\ssl\certs\ca-bundle.crt"

Dadurch wird git auf den oben genannten Pfad gesetzt, und dann können Sie das Zertifikat mit dem folgenden Befehl fetchen:

pcer fetch github.com -l git

Dann können Sie git clone ausführen und es würde normal funktionieren. Zum Beispiel:

Bildbeschreibung eingeben

Für weitere Informationen:

https://www.npmjs.com/package/pcer

https://github.com/PeterHdd/pcer

Hinweis: Ich bin der Besitzer dieses Pakets

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