Ich verwende Gitblit auf einem Windows Server und versuche, Daten von einem anderen Rechner im Netzwerk in ein Repository zu pushen. Ich habe ein SSL-Zertifikat verwendet (nicht selbstsigniert, aber ich denke, von meiner Firma signiert? Nicht wirklich sicher, wie das funktioniert, aber Chrome, IE usw. sehen aus, dass die Identität überprüft wurde).
Der Server, auf dem Gitblit ausgeführt wird, heißt itscm
und auf dem Desktop des Entwicklers verwende ich diese URL, um Daten über TortoiseGit zu übertragen:
git.exe Push --progress "https://itscm:8234/git/TestRepo.git" master
Ich erhalte jedoch diesen Fehler:
fatal: Zugriff auf ' https: // itscm: 8234/git/TestRepo.git/ ' nicht möglich: Problem mit SSL-Zertifikat: selbstsigniertes Zertifikat in Zertifikatkette
Wenn ich zu dieser Adresse in Chrom gehe, bekomme ich eine 404 auf der Seite. ABER ich kann sehen, dass das Vorhängeschloss in der URL-Leiste grün ist. Wenn ich auf das Vorhängeschloss klicke, sehe ich, dass die Identität verifiziert ist. Ich verstehe nicht, wie mein Browser dieses Zertifikat als gültig ansieht, aber wenn ich versuche, Daten über Git zu pushen, schlägt dies fehl.
Git für Windows verfügt über einen eigenen Vertrauensspeicher vertrauenswürdiger Zertifikate, der sich normalerweise in der Datei befindet
[Git installdir]\bin\curl-ca-bundle.crt
(z. B. C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
; konfiguriert durch den Schlüssel http.sslCAinfo
in [Git installdir]\etc\gitconfig
).[Git installdir]\mingwXX\ssl\certs\ca-bundle.crt
Dabei steht XX
für 32
oder 64
(z. B. C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
; konfiguriert durch die Taste http.sslCAinfo
in C:\ProgramData\Git\config
).Das Deaktivieren der Überprüfung von Zertifikaten (z. B. durch Festlegen von git config http.sslVerify false
) ist keine gute Idee und kann äußerst gefährlich sein (da alle Sicherheitsprüfungen deaktiviert sind und MitM-Angriffe leicht möglich sind - je nachdem, wo diese Einstellung festgelegt ist, gilt dies für alle neuen https Verbindungen).
Um ein Zertifikat (möglicherweise ein selbstsigniertes oder ein anderes Stammzertifikat) zu diesem Vertrauensspeicher hinzuzufügen, um es automatisch zu vertrauen, müssen Sie die folgenden Schritte ausführen:
Jetzt haben Sie mehrere Möglichkeiten
git config --global http.sslCAinfo "[yourfilename]"
in einer cli-Shell ausführen, um dieses Zertifikat nur als Vertrauensspeicher zu verwenden.git config --global http.sslCAinfo "[yourfilename]"
in einer cli-Shell ausführen, um diesen neuen Inhalt zu verwenden Trust Store.[path-to-git-trust-store-crt-file]
anhängen (z. B. durch type [yourfilename] >> [path-to-git-trust-store-crt-file]
in einer mit Administratorrechten ausgeführten Cli-Shell) OR. Verwenden Sie den Editor (erstellen Sie eine Kopie der Datei ca-bundle.crt.) Desktop, hängen Sie den Inhalt der heruntergeladenen .crt-Datei an und kopieren Sie ihn dann zurück). Nachteil: Änderungen werden beim Update von git möglicherweise überschriebenErledigt. Dieses Zertifikat befindet sich jetzt im Vertrauensspeicher von Git für Windows.
TortoiseGit verwendet wahrscheinlich nicht denselben Truststore-Chrome. Ich denke, Chrome nutzt den Systemspeicher, Firefox verwendet seinen eigenen. Ich habe keine Ahnung, was TortoiseGit verwendet.
Wenn Sie auf dem Client git config http.sslVerify false
einstellen, haben Sie möglicherweise mehr Glück. Sie können dies auch global setzen .
Hier ist was für mich gearbeitet hat. Erstellen Sie einen Ordner C:\GitCerts
. Laden Sie dann die Base64 .cer
-Datei (folgen Sie der Antwort von MrTux ) in diesen C:\GitCerts
-Ordner.
git config --global http.sslCAinfo "C:\GitCerts\MyCert.cer"
MyCert.cer
-Datei im Editor und lassen Sie sie geöffnetca-bundle.crt
-Datei in einem anderen Editor. Mein war an der Stelle C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
.MyCert.cer
-Datei in der ca-bundle.crt
-Datei ist (sollte es sein), wenn Sie nicht einfach den gesamten Text aus MyCert.cer kopieren und einfügen und ihn an den unteren Rand der Datei ca-bundle.crt anhängen (stellen Sie sicher, dass Sie dies tun lassen Sie alle anderen cert-Informationen dort).----- BEGIN-ZERTIFIKAT -----
ihre cert-Info hier
----- ENDE ZERTIFIKAT -----
ca-bundle.crt
zu überschreiben).ca-bundle.crt
-Datei den folgenden Befehl aus: git config --global http.sslcainfo "C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt"
Für diejenigen in einem Unternehmen, die den selbstsignierten Zertifikatsfehler erhalten, ist unten eine Alternative.
In Unternehmen ist derselbe Git-Server, auf den über das https-Protokoll zugegriffen werden kann, normalerweise auch über das Protokoll ssh verfügbar. Wählen Sie also die Option ssh der Server-URL aus, und klonen Sie das Repository als
git clone [email protected]/project.git
Natürlich muss der öffentliche Schlüssel (id_rsa.pub
) aus Ihrem ~\.ssh
-Ordner zum Server hinzugefügt werden. Auf diese Weise fügen Sie das https-Serverzertifikat nicht Ihrem Windows-Zertifikatspeicher oder Mac-Schlüsselbund hinzu ( example ).
Ich habe diesen Fehler mit GitHub erlebt und es kam anscheinend aus dem Nichts. Ich hatte vorher schon viel an GitHub gearbeitet.
Kaspersky Antivirus war der Schuldige !!
Als ich meinen Virenschutz aufhob (und ein paar Minuten wartete), konnte ich mein Github-Repo drücken/ziehen.
Meine letzte Lösung bestand darin, ein Zertifikat von Kaspersky ausfindig zu machen und es dem Git für Windows Trust Store hinzuzufügen. Der letzte Schritt ist bereits in der akzeptierten Antwort detailliert beschrieben, aber für alle anderen Personen, die sich in einer ähnlichen Position befanden, konnte ich das Kaspersky-Zertifikat unter folgendem Link finden:
Einstellungen> Weitere> Netzwerk> Scannen verschlüsselter Verbindungen - Erweiterte Einstellungen> Zertifikat installieren> Zertifikat anzeigen> Details> In Datei kopieren> Base-64-codiertes X.509 (.cer)
Ich habe noch eine Antwort auf dieses Problem gefunden:
$ git config http.sslVerify false