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