CURL не работает (ошибка № 77) для SSL-соединений в CentOS для пользователей без полномочий root

Совсем недавно мой сервер перестает работать на запросы curl на https://адреса для моего веб-сервера. Немного выкопавшись, кажется, что проблема с пользователем работает в веб-сервере.

Если я нахожу SSH на сервере как root и вызываю

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

... Я получаю следующий ответ...

* 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: */*

Однако, если я вхожу в систему как любую из учетных записей cPanel (также используемую при работе через веб-сервер), я получаю следующее...

* 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?)

Я не смог найти окончательный ответ на эту проблему, и моя хостинговая компания отказывается помочь, поскольку это "вне поддержки", хотя на прошлой неделе она отлично работала!

Я нашел упоминание в http://curl.haxx.se/docs/sslcerts.html, что

"Если libcurl был создан с поддержкой NSS, то в зависимости от дистрибутива ОС, вероятно, потребуется предпринять некоторые дополнительные шаги для использования общесистемного ЦС cert db. RedHat поставляется с дополнительным модулем libnsspem.so, который позволяет NSS для чтения пакета OpenSSL PEM CA. Эта библиотека отсутствует в OpenSuSE, и без него NSS может работать только со своими внутренними форматами. NSS также имеет новую формат базы данных: https://wiki.mozilla.org/NSS_Shared_DB"

... но я не могу найти никакой информации о том, как я получаю эту работу в масштабе всей системы на моем сервере CentOS.

Информация

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 

Может кто-нибудь пролить свет на то, почему это могло внезапно измениться, или еще лучше, как это исправить?

Спасибо

Ответ 1

Оказывается, проблема заключалась в том, что проблема с script выполнялась с помощью cPanel "email, отправленного по адресу script", поэтому работала как пользователь, так что это была проблема с пользователем, но не влияла на Интернет сервера вообще.

Причиной того, что пользователь не смог получить доступ к каталогу /etc/pki, был из-за того, что они имели доступ только к ssh. Как только я предоставил полный доступ, все это работало нормально.

Спасибо за информацию, хотя, Реми.

Ответ 2

Если вы недавно пришли сюда, как и я, при поиске той же ошибки напрасно, вы можете обнаружить, что это обновление NSS, вызывающее сбой в CentOS. Протестируйте, запустив yum update, и посмотрите, есть ли ошибки, curl также создает эту ошибку. Решение достаточно простое, просто установите NSS вручную.

Читать дальше...

Если вы похожи на меня, выдается ошибка, подобная этой:

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

Это заняло некоторое время, но выяснилось, что это не сертификат CA, потому что, воссоздав их и проверив все настройки, я исключил их. Это мог быть libcurl, поэтому я отправился на поиски обновлений.

Как уже упоминалось, я воссоздал сертификаты CA. Вы можете сделать это также, но это может быть пустой тратой времени. http://wiki.centos.org/HowTos/Https

Следующим шагом (вероятно, следовало быть моим первым) было проверить, что все было обновлено, просто запустив yum.

$ yum update
$ yum upgrade

Это дало мне утвердительный ответ, что в игре была более 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 проблема: 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 Я начал читать о проверке сертификатов с помощью NSS и о том, как это новое обновление может быть связано с моими проблемами. Итак, ням сломан. Это потому, что nss-softokn- * нужен nss-softokn-freebl- * нужен друг другу для работы. Проблема в том, что они не проверяют версию друг друга на совместимость, и в некоторых случаях это приводит к поломке ням. Давайте исправим вещи:

$ 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

Вам, конечно, нужно скачать с ближайшего зеркала и проверить правильность версии/ОС и т.д. Мы в основном скачиваем и устанавливаем обновление с rpm, чтобы исправить yum. Как отметил @grumpysysadmin, вы можете сократить количество команд. @cwgtex сообщил, что вы должны установить обновление с помощью команды RPM, что делает процесс еще проще.

Чтобы исправить ситуацию с WordPress вам нужно перезагрузить ваш http-сервер.

$ service httpd restart

Попробуй еще раз и удачи!

Ответ 3

У меня просто была похожая проблема с ошибкой № 77 на CentOS7. Мне не хватало мягкой ссылки /etc/pki/tls/certs/ca-bundle.crt, которая установлена с RP -сертификатом ca-Certificates.

'curl' пытался открыть этот путь, чтобы получить Центры сертификации. Я обнаружил с помощью:

strace curl https://example.com

и ясно увидел, что открывать не удалось по этой ссылке.

Мое исправление было:

yum reinstall ca-certificates

Это должно настроить все снова. Если у вас есть частные CA для корпоративного или самозаверяющего использования, убедитесь, что они находятся в /etc/pki/ca-trust/source/anchors, чтобы их можно было добавить заново.

Ответ 4

Убедитесь, что у вас есть правильные права, установленные в комплекте сертификатов CA. Обычно это означает доступ для чтения для всех в файлы CA в каталоге /etc/ssl/certs, например/etc/ssl/certs/ca-certificates.crt.

Вы можете увидеть, какие файлы были настроены для вашей версии с помощью команды

curl-config --configure
:
$ 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'

Здесь вам нужен доступ для чтения к /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='

И тут же.

Ответ 5

Для Ubuntu:

sudo apt-get install ca-certificates

Хит эту проблему, пытаясь свернуть вещи как корень внутри Dockerfile

Ответ 6

Ошибка связана с повреждением или отсутствием файлов сертификатов цепочки SSL в каталоге PKI. Вам нужно убедиться, что файлы ca-bundle, следуя шагам: В консоли/терминале:

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

Введите этот сайт: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates, получите свой ca-сертификат, например yout SO: ftp://rpmfind.net/linux/fedora/linux/updates/24/x86_64/c/ca-certificates-2016.2.8-1.0.fc24.noarch.rpm < < CentOS. Скопируйте URL-адрес для загрузки и вставки URL-адреса:   wget your_url_donwload_ca-ceritificated.rpm теперь установите yout rpm:

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

теперь перезапустите службу: мой пример этой команды:

sudo service2 httpd restart

очень здорово хороший внешний вид

Ответ 7

Я сталкивался с той же проблемой всякий раз, когда пытался выполнить curl на моем https-сервере.

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

Наблюдалась эта проблема, когда я неправильно настроил путь хранилища ключей. После исправления пути хранилища ключей все заработало.

Ответ 8

Пользователи Windows, добавьте это в PHP.ini:

curl.cainfo = "C:/cacert.pem";

Путь нужно изменить на свой, и вы можете скачать cacert.pem из поиска Google

(да, я знаю, это вопрос CentOS)