950 Stimmen

Wie kann ich Git dazu bringen, ein selbstsigniertes Zertifikat zu akzeptieren?

Gibt es eine Möglichkeit, Git so zu konfigurieren, dass es ein selbstsigniertes Zertifikat akzeptiert?

Ich verwende einen https-Server, um einen Git-Server zu hosten, aber im Moment ist das Zertifikat selbst signiert.

Wenn ich versuche, das Projektarchiv dort zum ersten Mal zu erstellen:

git push origin master -f

Ich erhalte die Fehlermeldung:

error: Cannot access URL     
https://the server/git.aspx/PocketReferences/, return code 22

fatal: git-http-push failed

1726voto

Christopher Punkte 39910

So akzeptieren Sie ein bestimmtes Zertifikat dauerhaft

Versuchen Sie http.sslCAPath o http.sslCAInfo . Adam Spiers' Antwort 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 zu bestehen -c a git mit der entsprechenden Konfigurationsvariable oder mit Flow's Antwort :

git -c http.sslVerify=false clone https://example.com/path/to/git

So deaktivieren Sie die SSL-Überprüfung für alle Repositories

Es ist möglich, die SSL-Verifizierung global zu deaktivieren. Es ist dringend empfohlen, dies NICHT zu tun aber sie wird der Vollständigkeit halber erwähnt:

git config --global http.sslVerify false # Do NOT do this!

Es gibt eine ganze Reihe von SSL-Konfigurationsoptionen in git . Aus der Manpage von git config :

http.sslVerify
    Whether to verify the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_NO_VERIFY environment variable.

http.sslCAInfo
    File containing the certificates to verify the peer with when fetching or pushing
    over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.

http.sslCAPath
    Path containing files with the CA certificates to verify the peer with when
    fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CAPATH environment variable.

Einige andere nützliche SSL-Konfigurationsoptionen:

http.sslCert
    File containing the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CERT environment variable.

http.sslKey
    File containing the SSL private key when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_KEY environment variable.

http.sslCertPasswordProtected
    Enable git's password prompt for the SSL certificate. Otherwise OpenSSL will
    prompt the user, possibly many times, if the certificate or private key is encrypted.
    Can be overridden by the GIT_SSL_CERT_PASSWORD_PROTECTED environment variable.

194voto

Flow Punkte 22785

Sie können einstellen GIT_SSL_NO_VERIFY a true :

GIT_SSL_NO_VERIFY=true git clone https://example.com/path/to/git

oder Git so konfigurieren, dass es die Verbindung in der Befehlszeile nicht überprüft:

git -c http.sslVerify=false clone https://example.com/path/to/git

Beachten Sie, dass, wenn Sie SSL/TLS-Zertifikate nicht verifizieren, dann Sie sind anfällig für MitM-Angriffe .

193voto

Adam Spiers Punkte 16227

Ich bin kein großer Fan der [EDIT: Die Originalversionen der] vorhandenen Antworten, denn die Deaktivierung von Sicherheitsüberprüfungen sollte ein letzter Ausweg sein, nicht die erste Lösung, die angeboten wird. Auch wenn Sie selbstsignierten Zertifikaten beim ersten Empfang ohne eine zusätzliche Überprüfungsmethode nicht trauen können, ist die Verwendung des Zertifikats für nachfolgende git Operationen zumindest das Leben für Angriffe, die nur nach Sie haben das Zertifikat heruntergeladen. Mit anderen Worten, wenn das von Ihnen heruntergeladene Zertifikat est echt, dann sind Sie von diesem Punkt an gut. Wenn Sie dagegen die Verifizierung einfach deaktivieren, sind Sie für jede Art von Man-in-the-Middle-Angriff anfällig an jedem beliebigen Punkt .

Um ein konkretes Beispiel zu nennen: die berühmte repo.or.cz Repository bietet ein selbstsigniertes Zertifikat . Ich kann diese Datei herunterladen und sie an einem Ort wie /etc/ssl/certs und dann tun:

# Initial clone
GIT_SSL_CAINFO=/etc/ssl/certs/rorcz_root_cert.pem \
    git clone https://repo.or.cz/org-mode.git

# Ensure all future interactions with origin remote also work
cd org-mode
git config http.sslCAInfo /etc/ssl/certs/rorcz_root_cert.pem

Beachten Sie, dass die Verwendung lokaler git config hier (d.h. ohne --global ) bedeutet, dass dieses selbstsignierte Zertifikat nur für dieses bestimmte Repository vertrauenswürdig ist, was gut ist. Es ist auch netter als die Verwendung von GIT_SSL_CAPATH da es das Risiko ausschließt, dass git die Überprüfung über eine andere Zertifizierungsstelle durchzuführen, die möglicherweise kompromittiert werden könnte.

65voto

Josh Peak Punkte 4948

Konfiguration des selbstsignierten Git-Zertifikats

tl;dr

Deaktivieren Sie NIEMALS die gesamte SSL-Verifizierung!

Dies schafft eine schlechte Sicherheitskultur. Seien Sie nicht so eine Person.

Die gesuchten Konfigurationsschlüssel sind:

Diese sind für die Konfiguration von Host-Zertifikaten, denen Sie vertrauen

Sie dienen dazu, IHR Zertifikat so zu konfigurieren, dass es auf SSL-Herausforderungen reagiert.

Wenden Sie die oben genannten Einstellungen selektiv auf bestimmte Hosts an.

Global .gitconfig für selbstsignierte Zertifizierungsstellen

Für mich und meine Kollegen haben wir es geschafft, selbstsignierte Zertifikate zum Laufen zu bringen, ohne sie zu deaktivieren sslVerify . Bearbeiten Sie Ihr .gitconfig zu verwenden git config --global -e diese hinzufügen:

# Specify the scheme and host as a 'context' that only these settings apply
# Must use Git v1.8.5+ for these contexts to work
[credential "https://your.domain.com"]
  username = user.name

  # Uncomment the credential helper that applies to your platform
  # Windows
  # helper = manager

  # OSX
  # helper = osxkeychain

  # Linux (in-memory credential helper)
  # helper = cache

  # Linux (permanent storage credential helper)
  # https://askubuntu.com/a/776335/491772

# Specify the scheme and host as a 'context' that only these settings apply 
# Must use Git v1.8.5+ for these contexts to work
[http "https://your.domain.com"]
  ##################################
  # Self Signed Server Certificate #
  ##################################

  # MUST be PEM format
  # Some situations require both the CAPath AND CAInfo 
  sslCAInfo = /path/to/selfCA/self-signed-certificate.crt
  sslCAPath = /path/to/selfCA/
  sslVerify = true

  ###########################################
  # Private Key and Certificate information #
  ###########################################

  # Must be PEM format and include BEGIN CERTIFICATE / END CERTIFICATE, 
  # not just the BEGIN PRIVATE KEY / END PRIVATE KEY for Git to recognise it.
  sslCert = /path/to/privatekey/myprivatecert.pem

  # Even if your PEM file is password protected, set this to false.
  # Setting this to true always asks for a password even if you don't have one.
  # When you do have a password, even with this set to false it will prompt anyhow. 
  sslCertPasswordProtected = 0

Referenzen:

Konfiguration angeben, wenn git clone -ing

Wenn Sie es pro Projektarchiv anwenden müssen, sagt Ihnen die Dokumentation, dass Sie einfach git config --local in Ihrem Repo-Verzeichnis. Nun, das ist nicht nützlich, wenn Sie die Repo noch nicht lokal geklont haben, nicht wahr?

Sie können die global -> local hokey-pokey, indem Sie Ihre globale Konfiguration wie oben einstellen und diese Einstellungen dann in Ihre lokale Repo-Konfiguration kopieren, sobald es geklont ist...

ODER was Sie tun können, ist geben Sie Konfigurationsbefehle unter git clone die auf das Ziel-Repositorium angewendet werden, sobald es geklont ist.

# Declare variables to make clone command less verbose     
OUR_CA_PATH=/path/to/selfCA/
OUR_CA_FILE=$OUR_CA_PATH/self-signed-certificate.crt
MY_PEM_FILE=/path/to/privatekey/myprivatecert.pem
SELF_SIGN_CONFIG="-c http.sslCAPath=$OUR_CA_PATH -c http.sslCAInfo=$OUR_CA_FILE -c http.sslVerify=1 -c http.sslCert=$MY_PEM_FILE -c http.sslCertPasswordProtected=0"

# With this environment variable defined it makes subsequent clones easier if you need to pull down multiple repos.
git clone $SELF_SIGN_CONFIG https://mygit.server.com/projects/myproject.git myproject/

Einzeiler

EDIT: Siehe VonC 's Antwort der auf einen Vorbehalt bezüglich absoluter und relativer Pfade für bestimmte Git-Versionen von 2.14.x/2.15 bis zu dieser einen Zeile hinweist

git clone -c http.sslCAPath="/path/to/selfCA" -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" -c http.sslVerify=1 -c http.sslCert="/path/to/privatekey/myprivatecert.pem" -c http.sslCertPasswordProtected=0 https://mygit.server.com/projects/myproject.git myproject/

CentOS unable to load client key

Wenn Sie dies unter CentOS versuchen und Ihr .pem Datei gibt Ihnen

unable to load client key: "-8178 (SEC_ERROR_BAD_KEY)"

Dann werden Sie wollen diese StackOverflow-Antwort darüber, wie curl verwendet NSS anstelle von Open SSL.

Und Sie werden es gerne tun wiederherstellen curl von der Quelle :

git clone http://github.com/curl/curl.git curl/
cd curl/
# Need these for ./buildconf
yum install autoconf automake libtool m4 nroff perl -y
#Need these for ./configure
yum install openssl-devel openldap-devel libssh2-devel -y

./buildconf
su # Switch to super user to install into /usr/bin/curl
./configure --with-openssl --with-ldap --with-libssh2 --prefix=/usr/
make
make install

Computer neu starten, da libcurl noch als gemeinsam genutzte Bibliothek im Speicher ist

Python, pip und conda

Verwandte Seiten : Wie fügt man ein benutzerdefiniertes CA-Root-Zertifikat zum CA-Speicher hinzu, der von pip in Windows verwendet wird?

35voto

AperioOculus Punkte 6545

Diese Antwort ist ein Auszug aus dieser Artikel verfasst von Michael Kauffman.

Verwenden Sie Git für Windows mit einem Unternehmens-SSL-Zertifikat

Ausgabe :

Wenn Sie ein Firmen-SSL-Zertifikat haben und Ihr Repository von der Konsole oder VSCode aus klonen wollen, erhalten Sie folgende Fehlermeldung:

_fatal: Kein Zugriff möglich ' https://myserver/tfs/DefaultCollection/_git/Proj/ ': SSL-Zertifikatsproblem: Lokales Ausstellerzertifikat kann nicht abgerufen werden_

Lösung :

  1. Exportieren Sie das selbstsignierte Root-Zertifikat in eine Datei. Sie können dies von Ihrem Browser aus tun.

  2. Suchen Sie die Datei "ca-bundle.crt" in Ihrem Git-Ordner (aktuelle Version C:\Program Dateien \Git\usr\ssl\certs aber das hat sich in der Vergangenheit geändert). Kopieren Sie die Datei in Ihr Benutzerprofil. Öffnen Sie sie mit einem Texteditor wie VSCode und fügen Sie den Inhalt des exportierten Zertifikats am Ende der Datei ein.

Jetzt müssen wir git so konfigurieren, dass es die neue Datei verwendet:

git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt

Dadurch wird der folgende Eintrag zu Ihrer .gitconfig-Datei im Stammverzeichnis Ihres Benutzerprofils hinzugefügt.

[http] sslCAInfo = C:/Users/<yourname>/ca-bundle.crt

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