CentOS PHP cURL NSS ошибка 5938

CentOS PHP cURL NSS ошибка 5938

Возникла странная проблема с cURL и PHP на нескольких компьютерах с CentOS.

Локально у меня CentOS 6.3. Удалённо — CentOS 5.9

Локально ящик получает запрос, отправляет файл на удаленный сервер, затем выполняет запрос cURL через PHP на удаленный сервер, чтобы отправить некоторую информацию. Запрос всегда терпит неудачу с первой попытки дня. Последующие запросы работают нормально. У удаленного сервера есть действительный сертификат SSL — даже в этом случае отключение проверки сертификата и хоста не решает проблему.

Логирование не очень помогло. Увеличивая уровень детализации до 11, наиболее значимые записи выглядят так:

* About to connect() to www.example.com port 443 (#0)
*   Trying 203.0.113.10... * connected
* Connected to www.example.com (203.0.113.10) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -5938
* Closing connection #0
* SSL connect error

Гугление ошибки тоже не помогает. Похоже, у твиттера была похожая проблема (https://dev.twitter.com/discussions/1549), которую они, по-видимому, исправили, но не уточнили, как именно.

Будем признательны за любые идеи о том, куда обратиться/что сделать, чтобы смягчить проблему.

решение1

это общая проблема для curl, скомпилированного с NSS (только пакеты curl для redhat-linux, debian и suse, скомпилированные без nss). вам нужно скомпилировать curl из исходников без nss-library.

Итак, у меня нет решения, как https-соединения работают с nss-curl.

curl --версия curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 НСС/3.14.3.0zlib/1.2.7 libidn/1.26 libssh2/1.4.3 Протоколы: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp Функции: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz

curl --version curl 7.25.0 (x86_64-suse-linux-gnu) libcurl/7.25.0 OpenSSL/1.0.1e zlib/1.2.7 libidn/1.25 libssh2/1.4.0 Протоколы: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp Возможности: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

решение2

Я столкнулся с похожей "NSS error -5938" при использовании устаревшей системы CentOS 6.x для подключения к встроенному устройству, которое перестало принимать TLS 1.0, допуская только TLS 1.1 и выше. Решением для меня было сделать yum update. Я увидел, что произошли следующие обновления:

---> Package curl.x86_64 0:7.19.7-46.el6 will be updated
---> Package curl.x86_64 0:7.19.7-52.el6 will be an update
...
---> Package nss.x86_64 0:3.21.0-0.3.el6_7 will be updated
---> Package nss.x86_64 0:3.21.3-2.el6_8 will be an update

Я думаю, что это может быть конкретное изменение, которое помогло:

$ rpm -q --changelog curl
[...]
* Mon Jan 11 2016 Kamil Dudka <[email protected]> 7.19.7-50
- use the default min/max TLS version provided by NSS (#1289205)

решение3

Сообщение об ошибке NSS 5938 обычно означает, что сервер разорвал ваше соединение. Вам следует проверить журналы сервера цели curl, чтобы узнать, почему ваше соединение было разорвано.

Это может быть что-то простое, например «не удалось получить обратное DNS-имя хоста для X».

Связанный контент