Tendo um problema estranho com cURL e PHP em algumas caixas do CentOS.
Localmente, estou executando o CentOS 6.3. Remoto é CentOS 5.9
Localmente, a caixa recebe uma solicitação, envia um arquivo scp para o servidor remoto e, em seguida, executa uma solicitação cURL via PHP para o servidor remoto para enviar algumas informações. A solicitação sempre falha na primeira tentativa do dia. As solicitações subsequentes funcionam bem. O remoto possui um certificado SSL válido - mesmo assim, desativar o certificado e a verificação do host não resolve o problema.
O registro não foi muito útil. Aumentando a verbosidade para 11, as entradas mais significativas são as seguintes:
* 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
Pesquisar o erro no Google também não ajuda muito. Parece que o Twitter estava tendo um problema semelhante (https://dev.twitter.com/discussions/1549) que eles aparentemente consertaram, mas não entraram em detalhes sobre como isso foi corrigido.
Qualquer ideia sobre onde procurar/o que fazer para mitigar o problema será apreciada.
Responder1
é um problema geral para curl compilado com NSS (apenas pacotes redhat-linuxes, debian e suse curl compilados sem nss). você precisa compilar curl a partir de fontes sem biblioteca nss.
então, não tenho solução de como as conexões https funcionavam com o nss-curl.
curl --versão curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.14.3.0zlib/1.2.7 libidn/1.26 libssh2/1.4.3 Protocolos: arquivo dict ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp Recursos: AsynchDNS GSS-Negociar 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 Protocolos: arquivo dict ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp Recursos: AsynchDNS GSS-Negociar IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
Responder2
Encontrei um "erro NSS -5938" semelhante ao usar um sistema CentOS 6.x desatualizado para conectar-se a um dispositivo incorporado que parou de aceitar TLS 1.0, permitindo apenas TLS 1.1 e superior. A solução para mim foi fazer um yum update
. Eu vi que essas atualizações ocorreram:
---> 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
Acho que essa pode ser a mudança específica que ajudou:
$ 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)
Responder3
A mensagem de erro 5938 do NSS geralmente significa que o servidor interrompeu sua conexão. Você deve verificar os logs do servidor do destino do curl para ver por que sua conexão foi interrompida.
Pode ser algo tão simples como "não foi possível obter um nome de host DNS reverso para X".