Gibt es eine Möglichkeit, Git anzuweisen, ein selbstsigniertes Zertifikat zu akzeptieren?
Ich verwende einen https-Server, um einen Git-Server zu hosten, aber im Moment ist das Zertifikat selbst signiert.
Wenn ich dort zum ersten Mal versuche, das Repo zu erstellen:
git push origin master -f
Ich bekomme den Fehler:
error: Cannot access URL
https://the server/git.aspx/PocketReferences/, return code 22
fatal: git-http-push failed
git
version-control
https
self-signed
Ian Vink
quelle
quelle
sslcainfo
Option nicht zu verwenden . Wenn Siecurl --cacert
Ihren Repo-Pfad erfolgreich abrufen können, Git jedoch nicht funktioniert, sollten Sie das Zertifikat dem mysteriösen OSX-Schlüsselbundprogramm hinzufügen. mehr hier superuser.com/questions/605900/...Antworten:
Ein bestimmtes Zertifikat dauerhaft akzeptieren
Versuchen Sie es
http.sslCAPath
oderhttp.sslCAInfo
. Die Antwort von Adam Spiers gibt einige gute Beispiele. Dies ist die sicherste Lösung für die Frage.So deaktivieren Sie die TLS / SSL-Überprüfung für einen einzelnen Git-Befehl
Versuchen Sie
-c
,git
mit der richtigen Konfigurationsvariablen zu übergeben, oder verwenden Sie die Antwort von Flow :So deaktivieren Sie die SSL-Überprüfung für ein bestimmtes Repository
Wenn das Repository vollständig unter Ihrer Kontrolle steht, können Sie Folgendes versuchen:
Es gibt einige SSL-Konfigurationsoptionen in
git
. Aus der Manpage vongit config
:Einige andere nützliche SSL-Konfigurationsoptionen:
quelle
git -c http.sslVerify=false clone https://domain.com/path/to/git
löste dies mein Problem, danke ...Sie können einstellen
GIT_SSL_NO_VERIFY
auftrue
:oder konfigurieren Sie Git alternativ so, dass die Verbindung in der Befehlszeile nicht überprüft wird:
Beachten Sie, dass Sie anfällig für MitM-Angriffe sind , wenn Sie SSL / TLS-Zertifikate nicht überprüfen .
quelle
-c
Flag on auch verwendengit
, um einen Konfigurationswert für einen einzelnen Befehl zu ändern. Ich denke jedoch, dass diese Syntax sauberer ist.-c
Git. Ich denke tatsächlich, dass es die sauberere Lösung ist, anstatt die Umwelt zu verschmutzen. :)git -c http.sslVerify=false <gitSubCommand>
dies auch über Vermittler möglich ist.Ich bin kein großer Fan der [EDIT: Originalversionen der] vorhandenen Antworten, da das Deaktivieren von Sicherheitsüberprüfungen ein letzter Ausweg sein sollte und nicht die erste angebotene Lösung. Auch wenn Sie selbstsignierten Zertifikaten beim ersten Empfang ohne eine zusätzliche Überprüfungsmethode nicht vertrauen können,
git
erschwert die Verwendung des Zertifikats für nachfolgende Vorgänge das Leben von Angriffen, die erst nach dem Herunterladen des Zertifikats auftreten, erheblich. Mit anderen Worten, wenn das Zertifikat , das Sie heruntergeladen ist echt, dann Sie ist gut von diesem Zeitpunkt an. Wenn Sie dagegen die Überprüfung einfach deaktivieren, sind Sie zu jedem Zeitpunkt offen für jede Art von Man-in-the-Middle-Angriff .Um ein konkretes Beispiel zu nennen: Das berühmte
repo.or.cz
Repository bietet ein selbstsigniertes Zertifikat . Ich kann diese Datei herunterladen, irgendwo platzieren/etc/ssl/certs
und dann Folgendes tun:Beachten Sie, dass die Verwendung von local
git config
hier (dh ohne--global
) bedeutet, dass dieses selbstsignierte Zertifikat nur für dieses bestimmte Repository vertrauenswürdig ist, was sehr hilfreich ist. Es ist auch besser als die Verwendung,GIT_SSL_CAPATH
da das Risiko einergit
Überprüfung durch eine andere Zertifizierungsstelle ausgeschlossen ist, die möglicherweise gefährdet sein könnte.quelle
/etc/ssl/certs/
Verzeichnis speichern und alles, was Sie brauchen, effizient aussortieren. Ich habe das--global
wohlgemerkt nicht getestet, aber es könnte Ihnen erlauben, ein mit einer ganzen Reihe von Zertifikaten zu verwenden. Es lohnt sich jedoch zu testen.git config http.validCertFingerprint <base64-encoded-hash-of-certifcate>
git clone --config http.sslCAInfo=<path_to_cert> https://repo.or.cz/org-mode.git
(Nachher muss kein 'git config'-Befehl mehr aufgerufen werden.)Konfiguration des selbstsignierten Git-Zertifikats
tl; dr
Die Konfigurationsschlüssel, nach denen Sie suchen, sind:
http.sslverify
- Immer wahr. Siehe obigen Hinweis.Diese dienen zum Konfigurieren von Host-Zertifikaten, denen Sie vertrauen
http.sslCAPath
http.sslCAInfo
Diese dienen zum Konfigurieren IHRES Zertifikats, um auf SSL-Herausforderungen zu reagieren.
http.sslCert
http.sslCertPasswordProtected
Wenden Sie die obigen Einstellungen selektiv auf bestimmte Hosts an.
http.<url>.*
Global
.gitconfig
für selbstsignierte ZertifizierungsstellenFür mich und meine Kollegen ist es hier gelungen, selbstsignierte Zertifikate ohne Deaktivierung zum Laufen zu bringen
sslVerify
. Bearbeiten Sie Ihre.gitconfig
mit:git config --global -e
Fügen Sie diese hinzu:Verweise:
Geben Sie beim
git clone
-ing die Konfiguration anWenn Sie es pro Repo anwenden müssen, werden Sie in der Dokumentation aufgefordert, es einfach
git config --local
in Ihrem Repo-Verzeichnis auszuführen . Nun, das ist nicht nützlich, wenn Sie das Repo noch nicht lokal geklont haben, oder?Sie können das
global -> local
hokey-pokey ausführen, indem Sie Ihre globale Konfiguration wie oben festlegen und diese Einstellungen dann in Ihre lokale Repo-Konfiguration kopieren, sobald sie geklont ist ...ODER Sie können Konfigurationsbefehle angeben
git clone
, die nach dem Klonen auf das Ziel-Repo angewendet werden.Einzeiler
EDIT: Siehe VonC ‚s Antwort , dass die Punkte aus einem Vorbehalt über absolute und relative Pfade für bestimmte git Versionen von 2.14.x / 2.15 auf diese Einzeiler
CentOS
unable to load client key
Wenn Sie dies unter CentOS versuchen und Ihre
.pem
Datei Ihnen gibtDann möchten Sie diese StackOverflow-Antwort darüber, wie
curl
NSS anstelle von Open SSL verwendet wird.Und Sie möchten aus der Quelle neu
curl
erstellen :Starten Sie den Computer neu, da sich libcurl noch als gemeinsam genutzte Bibliothek im Speicher befindet
Python, Pip und Conda
Verwandte Themen : Wie füge ich dem von pip in Windows verwendeten CA Store ein benutzerdefiniertes CA-Stammzertifikat hinzu?
quelle
http.sslCAPath
. In meinem Fall musste ichhttp.sslCAInfo
die spezifische Datei angeben. Dadurch konnte Git eine Verbindung zu unserem privaten GitHub herstellen, ohne die SSL-Validierung zu deaktivieren.Ich stoße immer wieder auf dieses Problem. Deshalb habe ich ein Skript geschrieben, um das selbstsignierte Zertifikat vom Server herunterzuladen und auf ~ / .gitcerts zu installieren. Aktualisieren Sie dann git-config, um auf diese Zertifikate zu verweisen. Es wird in der globalen Konfiguration gespeichert, sodass Sie es nur einmal pro Remote ausführen müssen.
https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh
quelle
Diese Antwort stammt aus diesem Artikel von Michael Kauffman.
Verwenden Sie Git für Windows mit einem SSL-Unternehmenszertifikat
Problem :
Wenn Sie ein SSL-Unternehmenszertifikat haben und Ihr Repo von der Konsole oder dem VSCode klonen möchten, wird die folgende Fehlermeldung angezeigt:
Schwerwiegend : Zugriff auf ' https: // myserver / tfs / DefaultCollection / _git / Proj / ' nicht möglich: Problem mit SSL-Zertifikat: Lokales Ausstellerzertifikat kann nicht abgerufen werden
Lösung :
Exportieren Sie das selbstsignierte Stammzertifikat in eine Datei. Sie können dies in Ihrem Browser tun.
Suchen Sie die Datei "ca-bundle.crt" in Ihrem Git-Ordner (aktuelle Version C: \ Programme \ Git \ usr \ ssl \ certs, wurde jedoch in der Vergangenheit geändert). Kopieren Sie die Datei in Ihr Benutzerprofil. Öffnen Sie es mit einem Texteditor wie VSCode und fügen Sie den Inhalt Ihres exportierten Zertifikats am Ende der Datei hinzu.
Jetzt müssen wir git konfigurieren, um die neue Datei zu verwenden:
git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt
Dadurch wird der .gitconfig-Datei im Stammverzeichnis Ihres Benutzerprofils der folgende Eintrag hinzugefügt.
[http] sslCAInfo = C:/Users/<yourname>/ca-bundle.crt
quelle
So deaktivieren Sie die SSL-Überprüfung für ein bestimmtes Repository Wenn das Repository vollständig unter Ihrer Kontrolle steht, können Sie Folgendes versuchen:
quelle
Seien Sie vorsichtig , wenn Sie verwenden eine Auskleidung mit sslKey oder sslcert, wie in Josh Spitzen ‚s Antwort :
Nur Git 2.14.x / 2.15 (Q3 2015) kann einen Pfad wie
~username/mykey
korrekt interpretieren (während es dennoch einen absoluten Pfad wie interpretieren kann/path/to/privatekey
).Siehe Commit 8d15496 (20. Juli 2017) von Junio C Hamano (
gitster
) .Mit freundlicher Unterstützung von Charles Bailey (
hashpling
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 17b1e1d , 11. August 2017)quelle
Fügen Sie unter Verwendung der 64-Bit-Version von Git unter Windows einfach das selbstsignierte CA-Zertifikat zu diesen Dateien hinzu:
Wenn es sich nur um ein selbstsigniertes Serverzertifikat handelt, fügen Sie es hinzu
quelle
Überprüfen Sie Ihre Antiviren- und Firewall-Einstellungen.
Von einem Tag auf den anderen funktionierte Git nicht mehr. Mit dem, was oben beschrieben wurde, stellte ich fest, dass Kaspersky ein selbstsigniertes persönliches Antiviren-Stammzertifikat in die Mitte stellt. Ich habe es nicht geschafft, Git dieses Zertifikat gemäß den obigen Anweisungen akzeptieren zu lassen. Ich habe das aufgegeben. Für mich funktioniert das Deaktivieren der Funktion zum Scannen verschlüsselter Verbindungen.
Danach funktioniert git wieder mit aktiviertem sslVerify.
Hinweis. Dies ist für mich immer noch nicht zufriedenstellend, da ich diese Funktion meines Anti-Virus aktiv haben möchte. In den erweiterten Einstellungen zeigt Kaspersky eine Liste von Websites an, die mit dieser Funktion nicht funktionieren. Github ist nicht als einer von ihnen aufgeführt. Ich werde es im Kaspersky-Forum überprüfen. Es scheint einige Themen zu geben, z. B. https://forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211
quelle
In der .gitconfig- Datei können Sie den unten angegebenen Wert hinzufügen, um das selbstsignierte Zertifikat akzeptabel zu machen
sslCAInfo = /home/XXXX/abc.crt
quelle
So mach ich es:
quelle
--global
! Viele Tutorials zeigen,--global
aber es ist eine sehr schlechte Idee im Allgemeinen und fürhttp.sslVerify
im Besonderen. Sobald Sie mehr als einen Klon aus verschiedenen Projekten, Unternehmen und Teams auf dem Computer haben, können Sie schnell in Schwierigkeiten geraten. Beispielsweise können Benutzer-IDs und E-Mails, die von einem Projekt zum nächsten gelangen, ziemlich peinlich sein. Die Verwendung von--global
onhttp.sslVerify
kann Sie für alle Arten von Sicherheitsproblemen öffnen. Also: Nicht verwenden--global
- es sei denn, Sie sind sich der Nebenwirkungen voll bewusst und bereit, das Risiko einzugehen.Unter Windows hat das bei mir funktioniert:
Fügen Sie den Inhalt Ihres selbstsignierten Zertifikats am Ende der Ca-Bundle- Datei hinzu. Einschließlich der Zeilen ----- BEGIN CERTIFICATE ----- und ----- END CERTIFICATE -----
Der Speicherort der Ca-Bundle- Datei ist normalerweise C: \ Programme \ Git \ mingw64 \ ssl \ certs
Fügen Sie anschließend den Pfad der Ca-Bundle- Datei zur globalen Git-Konfiguration hinzu. Der folgende Befehl macht den Trick:
git config --global http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"
Anmerkung: Der Pfad hängt von Ihrem lokalen Pfad der Ca-Bundle-Datei ab!
quelle
Es ist keine gute Praxis, http.sslVerify auf false zu setzen. Stattdessen können wir ein SSL-Zertifikat verwenden.
Der Build Agent verwendet also https mit SSL-Zertifikat und PAT zur Authentifizierung.
Kopieren Sie den Inhalt der cer-Datei einschließlich –begin — und –end--.
git bash on build agent => git config –global http.sslcainfo “C: / Programme / Git / mingw64 / ssl / certs / ca-bundle.crt” Gehen Sie zu dieser Datei und hängen Sie den .cer-Inhalt an.
Somit kann der Build Agent auf das SSL-Zertifikat zugreifen
quelle
Meine Antwort mag spät sein, aber es hat bei mir funktioniert. Es kann jemandem helfen.
Ich habe die oben genannten Schritte ausprobiert und das Problem wurde dadurch nicht gelöst.
Versuche dies
git config --global http.sslVerify false
quelle
Ich benutze eine Windows-Maschine und dieser Artikel hat mir geholfen. Grundsätzlich habe ich ca-bundle.crt im Editor geöffnet und darin Kettenzertifikate hinzugefügt (alle). Dieses Problem tritt normalerweise in Unternehmensnetzwerken auf, in denen zwischen System und Git Repo mittlere Männer sitzen. Wir müssen alle Zertifikate in der Zertifikatskette mit Ausnahme von Blattzertifikaten im Basis 64-Format exportieren und alle zu ca-bundle.crt hinzufügen und dann git für diese geänderte CRT-Datei konfigurieren.
quelle