it-swarm.com.de

Überprüfung des Serverzertifikats fehlgeschlagen. CA-Datei: /etc/ssl/certs/ca-certificates.crt CRL-Datei: keine

Ich kann ein Projekt mit ssh per Push-by-Clone kopieren, aber es funktioniert nicht, wenn ich ein Projekt mit https klone. es zeigt Nachrichtenfehler wie unten.

server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
275
Sokhom Ratanak

TLDR:

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

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

Lange Antwort

Der Hauptgrund ist, dass Ihr Computer der Zertifizierungsstelle, die das Zertifikat signiert hat, nicht vertraut auf dem Gitlab-Server verwendet. Dies bedeutet nicht, dass das Zertifikat verdächtig ist, es kann jedoch selbstsigniert oder von einer Institution/Firma signiert sein, die nicht in der Liste der Zertifizierungsstellen Ihres Betriebssystems aufgeführt ist. Was Sie tun müssen, um das Problem zu umgehen auf Ihrem Computer bedeutet, diesem Zertifikat zu vertrauen - wenn Sie keinen Grund haben, diesbezüglich misstrauisch zu sein.

Sie müssen das für Ihren gitLab-Server verwendete Web-Zertifikat überprüfen und zu Ihrem </git_installation_folder>/bin/curl-ca-bundle.crt hinzufügen.

Um zu überprüfen, ob mindestens der Klon funktioniert ohne Überprüfung des Zertifikats, können Sie Folgendes festlegen:

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

Dies ist jedoch nur zu Testzwecken gedacht, wie in " SSL funktioniert mit Browser, wget und curl, schlägt jedoch mit git fehl " oder in diesem Blogeintrag .

Überprüfen Sie Ihre GitLab-Einstellungen, a in Problem 4272 .


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

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

(mit 'yourserver.com' als GitLab-Servernamen)

Geben Sie zum Überprüfen der Zertifizierungsstelle (Certificate Authority Issuer) Folgendes ein:

echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort \
  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, dem Befehl openssl die Option -servername hinzuzufügen, andernfalls wird das Zertifikat für www.github.com in nicht angezeigt Valeriys Fall.

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 ermitteln, können Sie den Befehl verwenden

curl-config --ca

Siehe auch meine neuere Antwort " github: Überprüfung des Serverzertifikats fehlgeschlagen ": Möglicherweise müssen Sie diese Zertifikate umkristallisieren:

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
346
VonC

Hinweis: Dies hat Haupt- Sicherheitsauswirkungen.

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

export GIT_SSL_NO_VERIFY=1

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

184
Afzal Masood

Eine andere Ursache für dieses Problem könnte sein, dass Ihre Uhr nicht funktioniert. Zertifikate sind zeitkritisch.

So überprüfen Sie die aktuelle Systemzeit:

date -R

Sie können NTP installieren, um die Systemzeit automatisch mit vertrauenswürdigen Internet-Zeitservern aus dem globalen NTP -Pool zu synchronisieren. Zum Beispiel, um unter Debian/Ubuntu zu installieren:

apt-get install ntp
133
davidthings

Wenn Sie einen Git-Server in einem privaten Netzwerk verwenden und ein selbstsigniertes Zertifikat oder ein Zertifikat über eine IP-Adresse verwenden; Sie können auch einfach die git global config verwenden, um die SSL-Prüfungen zu deaktivieren:

git config --global http.sslverify "false"
51
Romain VDK

Hatte das gleiche Problem. Verursacht von einer selbst ausgestellten Zertifizierungsstelle. Gelöst durch Hinzufügen der .pem-Datei zu / usr/local/share/ca-certificates / und Aufrufen

Sudo update-ca-certificates

PS: PEM-Datei im Ordner ./share/ca-certificates MUSS die Erweiterung .crt haben

42
Nikolay Ruban

Überprüfen Sie Ihre Systemuhr,

$ date

Wenn es nicht korrekt ist, schlägt die Zertifikatprüfung fehl. So korrigieren Sie die Systemuhr:

$ apt-get install ntp

Die Uhr sollte sich selbst synchronisieren.

Geben Sie zum Schluss den Klonbefehl erneut ein.

31
mycowan
GIT_CURL_VERBOSE=1 git [clone|fetch]…

sollte dir sagen wo das problem ist. In meinem Fall lag es daran, dass cURL keine PEM-Zertifikate unterstützt, wenn es gegen NSS erstellt wurde, da diese Unterstützung in NSS nicht im Vordergrund stand ( # 726116# 804215# 402712ndmehr ).

21
Tobu

Oder führen Sie einfach diesen Kommentar aus, um das Serverzertifikat zu Ihrer Datenbank hinzuzufügen:

echo $(echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort 2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p') >> /etc/ssl/certs/ca-certificates.crt

Dann mache git clone nochmal.

16
phiphu

Ich habe meine CA-Dateien durcheinandergebracht, während ich den goagent-Proxy eingerichtet habe. Ich kann keine Daten von Github abrufen und bekomme dieselbe Warnung:

überprüfung des Serverzertifikats fehlgeschlagen. CA-Datei: /etc/ssl/certs/ca-certificates.crt CRL-Datei: keine

verwenden Sie Voncs Methode, holen Sie sich das Zertifikat von github und speichern Sie es in /etc/ssl/certs/ca-certificates.crt. Das Problem ist behoben.

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

9
IFQ

es ist nicht erforderlich, die git ssl-Überprüfung auf false zu setzen. Es wird verursacht, wenn das System nicht über alle CA-Autorisierungszertifikate verfügt. Meistens fehlt bei Personen mit einem echten SSL-Zertifikat das Zwischenzertifikat.

Fügen Sie einfach den vollständigen Text des Zwischenzertifikats (die gesamte Kette der fehlenden Zertifizierungsstelle und des Zwischenzertifikats) hinzu

Sudo gedit /etc/ssl/certs/ca-certificates.crt 

funktioniert ohne update-ca-certificates auszuführen.

Gleiches gilt für manuell generierte Zertifikate. Fügen Sie einfach den CA-Zertifikatstext hinzu.

Am Ende: Push erfolgreich: Alles ist aktuell

8
abcdef12

Ich habe Xubuntu auf einem Raspberry Pi 2 installiert und mit der Zeit das gleiche Problem festgestellt, da NTP und die automatische Serversynchronisierung deaktiviert (oder nicht installiert) waren. NTP holen

Sudo apt-get install ntp

und ändern Sie "Uhrzeit und Datum" von "Manuell" in "Mit Internet-Servern synchronisieren".

3
user273711

Fügen Sie schließlich die Datei http.sslverify zu Ihrer .git/config hinzu.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "Origin"]
    url = https://server/user/project.git
    fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
    remote = Origin
    merge = refs/heads/master
[http]
        sslVerify = false
1
Mickael L

Was ich getan habe, um dieses Problem im Terminal zu lösen (Ubuntu 18.04):

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

Ich habe zwei Brocken Zertifikatsbrocken. Und ich habe die Zertifikatsabschnitte in meine Zertifikatsdatei nach /etc/ssl/certs/ca-certificates.crt kopiert.

1
mindcoder

Ich bin gerade auf das gleiche Problem mit einem Git-Repository gestoßen, das immer für mich funktioniert. Das Problem war, dass ich über einen öffentlichen WLAN-Zugang darauf zugegriffen habe, der bei der ersten Verbindung zu einem unverlierbaren Portal umleitet (zum Beispiel um Anzeigen zu schalten und mit den Nutzungsbedingungen übereinzustimmen).

0
Tosha

Lassen Sie das Zertifikat und das Bundle in eine .crt-Datei kopieren und stellen Sie sicher, dass zwischen den Zertifikaten in der Datei eine leere Zeile steht.

Dies funktionierte für mich auf einem GitLab-Server, nachdem ich alles im Internet ausprobiert hatte.

0
shambhu