567 Stimmen

Die Server-Zertifikatsprüfung ist fehlgeschlagen. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

Ich kann mein Projekt mit SSH klonen, aber es funktioniert nicht, wenn ich das Projekt mit HTTPS klonen möchte.

Die Fehlermeldung, die es mir zeigt, lautet:

Server-Zertifikatsüberprüfung fehlgeschlagen. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none

592voto

VonC Punkte 1117238

Zusammenfassung:

hostname=XXX
port=443
trust_cert_file_location=`curl-config --ca`

sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port -servername $hostname \
    2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'  \
    >> $trust_cert_file_location"

Warnung: Wie in der ausgezeichneten Antwort von gareththered bemerkt, fügt dies alle Zertifikate hinzu, anstatt nur die Root-CA.
Blind alle (beliebige) Zertifikate Ihrem TrustStore hinzuzufügen, ohne Vorkehrungen zu treffen, ist nicht der beste Weg.


Ausführliche Antwort

Der Grund ist folgender: Ihr Computer vertraut der Zertifizierungsstelle nicht, die das Zertifikat für den Gitlab-Server signiert hat. Das bedeutet nicht, dass das Zertifikat verdächtig ist, aber es könnte selbst signiert sein oder von einer Institution/Firma signiert sein, die nicht in der Liste der Zertifizierungsstellen Ihres Betriebssystems steht. Was Sie tun müssen, um das Problem auf Ihrem Computer zu umgehen, ist ihm mitzuteilen, dass es diesem Zertifikat vertrauen soll - wenn Sie keinen Grund haben, daran zu zweifeln.

Sie müssen das Web-Zertifikat für Ihren GitLab-Server überprüfen und es Ihrer /bin/curl-ca-bundle.crt hinzufügen.

Um zu überprüfen, ob das Klonen ohne Überprüfung besagten Zertifikats funktioniert, können Sie Folgendes eingeben:

export GIT_SSL_NO_VERIFY=1
#oder
git config --global http.sslverify false

Dies wäre jedoch nur zum Testen, wie in "SSL funktioniert mit Browser, wget und curl, aber nicht mit git", oder in diesem Blog-Beitrag erläutert.

Überprüfen Sie Ihre GitLab-Einstellungen, z.B. in Issue 4272.


Um dieses Zertifikat zu erhalten (das Sie zu Ihrer curl-ca-bundle.crt Datei hinzufügen müssten), geben Sie folgendes ein:

echo -n | openssl s_client -showcerts -connect yourserver.com:IhrHttpsGitlabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

(wobei 'yourserver.com' der Name Ihres GitLab-Servers ist und IhrHttpsGitlabPort der HTTPS-Port ist, normalerweise 443)

Um die Zertifizierungsstelle (CA) zu überprüfen, geben Sie folgendes ein:

echo -n | openssl s_client -showcerts -connect yourserver.com:IhrHttpsGilabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
  | openssl x509 -noout -text | grep "CA Issuers" | head -1

Hinweis: Valeriy Katkov schlägt in den Kommentaren vor, die Option -servername zum openssl-Befehl hinzuzufügen, da der Befehl sonst im Falle von www.github.com kein Zertifikat anzeigt.

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

Findekano fügt in den Kommentaren hinzu:

um den Speicherort von curl-ca-bundle.crt zu identifizieren, könnten Sie den Befehl verwenden

curl-config --ca

Sehen Sie auch meine neueste Antwort "github: server certificate verification failed": Möglicherweise müssen Sie diese Zertifikate neu installieren:

sudo apt-get install --reinstall ca-certificates
sudo mkdir /usr/local/share/ca-certificates/cacert.org
sudo wget -P /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt
sudo update-ca-certificates
git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt

390voto

Afzal Masood Punkte 3663

Hinweis: Dies hat große Sicherheitsimplikationen.

Öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl aus:

export GIT_SSL_NO_VERIFY=1

Es funktioniert für mich und ich benutze ein Linux-System.

185voto

davidthings Punkte 1810

Ein weiterer Grund für dieses Problem könnte sein, dass Ihre Uhr falsch eingestellt ist. Zertifikate sind zeitabhängig.

Um die aktuelle Systemzeit zu überprüfen:

date -R

Sie könnten in Betracht ziehen, NTP zu installieren, um die Systemzeit automatisch mit vertrauenswürdigen Internet-Zeitservern aus dem globalen NTP-Pool zu synchronisieren. Zum Beispiel zur Installation auf Debian/Ubuntu:

apt-get install ntp

141voto

Romain VDK Punkte 1490

Hinweis: Dies hat große Sicherheitsimplikationen.

Wenn Sie einen Git-Server innerhalb eines privaten Netzwerks verwenden und ein selbstsigniertes Zertifikat oder ein Zertifikat über eine IP-Adresse verwenden; können Sie auch einfach die Git-Global-Konfiguration verwenden, um die SSL-Prüfungen zu deaktivieren:

git config --global http.sslverify "false"

56voto

Nikolay Ruban Punkte 921

Hatte dasselbe Problem. Verursacht durch selbst ausgestellte Zertifizierungsstelle. Habe es gelöst, indem ich die .pem-Datei zu /usr/local/share/ca-certificates/ hinzugefügt habe und sudo update-ca-certificates aufgerufen habe

NB: Die pem-Datei im Ordner ./share/ca-certificates MUSS die Erweiterung .crt haben

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