wake-up-neo.com

Ungültiges SSL-Zertifikat beim Push an den Git-Server

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.

25
Justin

Git für Windows verfügt über einen eigenen Vertrauensspeicher vertrauenswürdiger Zertifikate, der sich normalerweise in der Datei befindet

  • Git für Windows <= 1.9: [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 für Windows> = 2.0: [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:

  1. Öffnen Sie die URL der Site in Internet Explorer
  2. Klicken Sie auf das Schlosssymbol in der lokalen Leiste und wählen Sie "Zertifikate anzeigen" (oder wählen Sie Eigenschaften der Site und klicken Sie auf "Zertifikate").
  3. (Optional) Wählen Sie das Zertifikat aus, dem Sie in der Zertifikatkette (dritte Registerkarte) vertrauen möchten, und öffnen Sie es
  4. Gehen Sie zur zweiten Registerkarte "Details".
  5. Klicken Sie auf "Speichern in Datei", wählen Sie "Base64-encoded X.509 (.CER)" und speichern Sie es unter einem eindeutigen Namen (merken Sie sich diesen Namen; ein Name ohne Leerzeichen wird empfohlen).
  6. Jetzt haben Sie mehrere Möglichkeiten

    1. Verwenden Sie einen separaten Zertifikat-Vertrauensspeicher, der nur Ihr gerade heruntergeladenes Zertifikat enthält, indem Sie git config --global http.sslCAinfo "[yourfilename]" in einer cli-Shell ausführen, um dieses Zertifikat nur als Vertrauensspeicher zu verwenden.
    2. Verwenden Sie einen separaten Zertifikat-Vertrauensspeicher, der das gerade heruntergeladene Zertifikat und alle Zertifikate aus dem git-Vertrauensspeicher enthält, indem Sie den gesamten Inhalt der System-Vertrauensspeicherdatei (Pfad siehe oben) anhängen und anschließend git config --global http.sslCAinfo "[yourfilename]" in einer cli-Shell ausführen, um diesen neuen Inhalt zu verwenden Trust Store.
    3. Aktualisieren Sie die Systemzertifikatdatei, indem Sie den Inhalt Ihrer gerade gespeicherten Datei an [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 überschrieben

Erledigt. Dieses Zertifikat befindet sich jetzt im Vertrauensspeicher von Git für Windows.

28
MrTux

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 .

22
James Moger

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.

  • Führen Sie über die Befehlszeile den folgenden Befehl aus: git config --global http.sslCAinfo "C:\GitCerts\MyCert.cer"
  • Öffnen Sie die MyCert.cer-Datei im Editor und lassen Sie sie geöffnet
  • Öffnen Sie die Git ca-bundle.crt-Datei in einem anderen Editor. Mein war an der Stelle C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt.
  • Stellen Sie sicher, dass der cert-Text in der 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 -----

  • Wenn Sie die Datei ca-bundle.crt ändern mussten, speichern Sie sie (möglicherweise müssen Sie sie auf Ihrem Desktop speichern und anschließend kopieren und wieder einfügen, um die Datei ca-bundle.crt zu überschreiben).
  • Führen Sie schließlich basierend auf dem Pfad Ihrer ca-bundle.crt-Datei den folgenden Befehl aus: git config --global http.sslcainfo "C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt"
3
dan-iel

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 ). 

0
Kiran

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
0
Karthikeyan