webentwicklung-frage-antwort-db.com.de

cURL funktioniert nicht (Fehler Nr. 77) für SSL-Verbindungen unter CentOS für Benutzer ohne Rootberechtigung

Vor kurzem hat mein Server die Curl-Anfragen an https: // Adressen für meinen Webserver eingestellt. Wenn Sie ein wenig herumgegraben haben, scheint es ein Problem mit dem Benutzer zu sein, auf dem der Webserver läuft.

Wenn ich SSH auf den Server als root & rufe

curl -I -v https://google.com

... bekomme ich folgende Antwort ...

* About to connect() to google.com port 443 (#0)
*   Trying 173.194.67.113... connected
* Connected to google.com (173.194.67.113) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using SSL_RSA_WITH_RC4_128_SHA
* Server certificate:
*       subject: CN=*.google.com,O=Google Inc,L=Mountain View,ST=California,C=US
*       start date: May 22 15:50:20 2013 GMT
*       expire date: Oct 31 23:59:59 2013 GMT
*       common name: *.google.com
*       issuer: CN=Google Internet Authority,O=Google Inc,C=US
> HEAD / HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: google.com
> Accept: */*

Wenn ich mich jedoch unter einem der cPanel-Konten anmelde (auch beim Ausführen über den Webserver), erhalte ich Folgendes:.

* About to connect() to google.com port 443 (#0)
*   Trying 173.194.67.101... connected
* Connected to google.com (173.194.67.101) port 443 (#0)
* Initializing NSS with certpath: none
* NSS error -5978
* Closing connection #0
* Problem with the SSL CA cert (path? access rights?)
curl: (77) Problem with the SSL CA cert (path? access rights?)

Ich konnte keine endgültige Antwort auf das Problem finden und mein Hosting-Unternehmen weigert sich zu helfen, da es "Out of Support" ist, obwohl es letzte Woche gut funktioniert hat!

Ich habe Erwähnung auf http://curl.haxx.se/docs/sslcerts.html gefunden

"Wenn libcurl mit NSS-Unterstützung erstellt wurde, ist es wahrscheinlich, abhängig von der Betriebssystemverteilung, erforderlich, einige Schritte zur Verwendung der systemweiten CA Cert db zu unternehmen. RedHat wird mit einem zusätzlichen Modul, libnsspem, ausgeliefert. Damit kann NSS das OpenSSL PEM CA-Bundle lesen. Diese Bibliothek fehlt in OpenSuSE, und Ohne sie kann NSS nur mit seinen eigenen internen Formaten arbeiten. NSS hat auch ein neues Datenbankformat .__ : https://wiki.mozilla.org/NSS_Shared_DB "

... aber ich finde keine Informationen darüber, wie ich das systemweit auf meinem CentOS-Server zum Laufen bekomme.

Info

curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp 
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 

Kann jemand ein wenig Licht auf die Frage werfen, warum sich dies plötzlich geändert hat oder besser noch, wie man es beheben kann?

Vielen Dank

17
TobyG

Es stellte sich heraus, dass das Problem mit dem Gesicht war, dass das Skript von einem cPanel "E-Mail an Skript weitergeleitet" ausgeführt wurde, also als Benutzer ausgeführt wurde. Dies war ein Benutzerproblem, das den Webserver jedoch überhaupt nicht beeinträchtigte.

Die Ursache dafür, dass der Benutzer nicht auf das Verzeichnis/etc/pki zugreifen konnte, lag daran, dass er nur den Zugriff auf die ssh-Verbindung hatte. Nachdem ich den vollständigen Zugriff gewährt hatte, funktionierte alles gut.

Danke für die Info, Remi.

2
TobyG

Wenn Sie vor kurzem hier ankamen, als ich vergeblich nach dem gleichen Fehler gesucht hatte, könnte es sich um ein Update des NSS handeln, das auf CentOS fehlschlägt. Testen Sie, indem Sie das Yum-Update ausführen, und stellen Sie fest, ob Sie Fehler erhalten. Außerdem erzeugt curl diesen Fehler. Die Lösung ist einfach genug, installieren Sie NSS manuell.

Weiter lesen...

Wenn Sie wie ich sind, warf es einen Fehler ähnlich dem folgenden auf:

curl: (77) Problem with the SSL CA cert (path? access rights?)

Es dauerte einige Zeit, um das Problem zu lösen, stellte jedoch fest, dass es nicht das CA-Zertifikat war, da ich es durch das erneute Erstellen und Überprüfen der gesamten Konfiguration ausgeschlossen hatte. Es hätte libcurl sein können, also suchte ich nach Updates.

Wie bereits erwähnt, habe ich CA-Zertifikate neu erstellt. Sie können dies auch tun, aber es kann Zeitverschwendung sein. http://wiki.centos.org/HowTos/Https

Der nächste Schritt (wahrscheinlich sollte mein erster sein) bestand darin, zu prüfen, ob alles auf dem neuesten Stand war, indem einfach yum ausgeführt wurde.

$ yum update
$ yum upgrade

Dies gab mir eine bejahende Antwort, dass ein größeres Problem im Spiel war: Downloading Packages: error: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: BAD Problem opening package nss-softokn-freebl-3.14.3–19.el6_6.x86_64.rpm Ich fing an, über Certificate Verification mit NSS zu lesen und wie dieses neue Update mit meinen Problemen zusammenhängt. So ist yum kaputt. Dies liegt daran, dass nss-softokn- * nss-softokn-freebl- * benötigt, um zu funktionieren. Das Problem ist, dass sie nicht die jeweils andere Version auf Kompatibilität prüfen und in einigen Fällen am Ende das Brechen von yum.

$ wget http://mirrors.linode.com/centos/6.6/updates/x86_64/Packages/nsssoftokn-freebl-3.14.3-19.el6_6.x86_64.rpm
$ rpm -Uvh nss-softokn-freebl-3.14.3–19.el6_6.x86_64.rpm
$ yum update

Sie sollten natürlich von Ihrem nächstgelegenen Spiegel herunterladen und nach der korrekten Version/Betriebssystem usw. suchen. Wir laden das Update grundsätzlich vom RPM herunter und installieren es, um yum zu beheben. Wie @ grumpysysadmin darauf hinweist, können Sie die Befehle verkürzen. @cwgtex hat dazu beigetragen, dass Sie das Upgrade mit dem RPM-Befehl installieren sollten, um den Prozess noch einfacher zu gestalten.

Um Probleme mit WordPress zu beheben, müssen Sie Ihren http-Server neu starten.

$ service httpd restart

Versuchen Sie es noch einmal und Erfolg!

11
Will

Stellen Sie sicher, dass Sie über die richtigen Rechte für das CA-Zertifikatspaket verfügen. Normalerweise bedeutet dies Lesezugriff für alle CA-Dateien im Verzeichnis/etc/ssl/certs, z. B. /etc/ssl/certs/ca-certificates.crt.

Mit der können Sie sehen, welche Dateien für Ihre Curl-Version konfiguriert wurden 

$ curl-config --configure
 '--prefix=/usr' 
 '--mandir=/usr/share/man' 
 '--disable-dependency-tracking' 
 '--disable-ldap' 
 '--disable-ldaps' 
 '--enable-ipv6' 
 '--enable-manual' 
 '--enable-versioned-symbols' 
 '--enable-threaded-resolver' 
 '--without-libidn' 
 '--with-random=/dev/urandom' 
 '--with-ca-bundle=/etc/ssl/certs/ca-certificates.crt' 
 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4' 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro' 
 'CPPFLAGS=-D_FORTIFY_SOURCE=2'

Hier benötigen Sie Lesezugriff auf /etc/ssl/certs/ca-certificates.crt

$ curl-config --configure
 '--build' 'i486-linux-gnu' 
 '--prefix=/usr' 
 '--mandir=/usr/share/man' 
 '--disable-dependency-tracking' 
 '--enable-ipv6' 
 '--with-lber-lib=lber' 
 '--enable-manual' 
 '--enable-versioned-symbols' 
 '--with-gssapi=/usr' 
 '--with-ca-path=/etc/ssl/certs' 
 'build_alias=i486-linux-gnu' 
 'CFLAGS=-g -O2' 
 'LDFLAGS=' 
 'CPPFLAGS='

Und das gleiche hier.

2
Remi Gacogne

Für Ubuntu:

Sudo apt-get install ca-certificates

Triff dieses Problem, indem du versuchst, Dinge als ROOT in Dockerfile zu rollen

1
WilderField

Der Fehler ist auf beschädigte oder fehlende SSL-Kettenzertifikatdateien im PKI-Verzeichnis zurückzuführen. Sie müssen sicherstellen, dass die Dateien ca-bündel sind. Führen Sie dazu die folgenden Schritte aus: In Ihrer Konsole/Ihrem Terminal:

mkdir /usr/src/ca-certificates && cd /usr/src/ca-certificates

Rufen Sie diese Site auf: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates , erhalten Sie Ihr CA-Zertifikat für Ihr SO, zum Beispiel: ftp: //rpmfind.net/linux/Fedora/linux/updates/24/x86_64/c/ca-certificates-2016.2.8-1.0.fc24.noarch.rpm << CentOS. Kopieren Sie die URL des Downloads und fügen Sie sie in die URL ein: wget your_url_donwload_ca-ceritificated.rpmnow, installieren Sie Ihr rpm:

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

starten Sie nun Ihren Dienst neu: Mein Beispiel dieser Befehl: 

Sudo service2 httpd restart

sehr gut gut aussehen

0

Ich hatte gerade ein ähnliches Problem mit dem Fehler # 77 unter CentOS7. Mir fehlte das softlink /etc/pki/tls/certs/ca-bundle.crt , das mit dem RPM für Ca-Zertifikate installiert ist.

'curl' hat versucht, diesen Pfad für die Zertifizierungsstellen zu öffnen. Ich entdeckte mit:

strace curl https://example.com

und sah klar, dass das Öffnen an diesem Link fehlgeschlagen ist.

Mein Fix war:

yum reinstall ca-certificates

Das sollte alles wieder einrichten. Wenn Sie über private Zertifizierungsstellen für Unternehmen verfügen oder sich selbst signieren lassen, stellen Sie sicher, dass sie sich in/etc/pki/ca-trust/source/anchors befinden, damit sie erneut hinzugefügt werden.

0
DavidG

Ich hatte das gleiche Problem, wenn ich versuchte, curl auf meinem https-Server auszuführen. 

About to connect() to localhost port 443 (#0)
Trying ::1...
Connected to localhost (::1) port 443 (#0)
Initializing NSS with certpath: sql:/etc/pki/nssdb

Dieses Problem wurde bei der falschen Konfiguration des Keystore-Pfads festgestellt. Nach dem Korrigieren des Keystore-Pfads hat es funktioniert.

0
rakeshz