CentOS PHP cURL NSS错误5938

在几个CentOS盒子上用cURL和PHP有一个奇怪的问题。

我在本地运行CentOS 6.3。 远程是CentOS 5.9

在本地,这个盒子接收到一个请求,scp的一个文件到远程服务器,然后通过PHP执行一个cURL请求到远程服务器发送一些信息。 请求总是在第一次尝试的时候失败。 随后的请求正常工作。 远程有一个有效的SSL证书 – 即使如此,closures证书和主机validation不能解决问题。

日志logging不是很有帮助。 把冗长变为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 

谷歌search错误也没有多大帮助。 看起来像twitter有一个类似的问题( https://dev.twitter.com/discussions/1549 ),他们显然是固定的,但没有详细说明如何得到修复。

任何想法在哪里看/如何做,以缓解这个问题,将不胜感激。

这是使用NSS编译的curl的一般问题(只有redhat-linuxes,debian和suse curl包在没有nss的情况下编译)。 你需要从没有nss库的源代码编译curl。

所以,我还没有解决如何https连接与nss-curl工作。

curl –version curl 7.29.0(x86_64-redhat-linux-gnu)libcurl / 7.29.0 NSS / 3.14.3.0 zlib / 1.2.7 libidn / 1.26 libssh2 / 1.4.3协议:dict文件ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftpfunction:AsynchDNS GSS协商IDN IPv6大文件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文件ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp特性:AsynchDNS GSS协商IDN IPv6大文件NTLM NTLM_WB SSL libz TLS-SRP

当使用过时的CentOS 6.x系统连接到停止接受TLS 1.0的embedded式设备时,我遇到了类似的“NSS error -5938”,只允许TLS 1.1和更高版本。 对我来说,解决scheme是做一个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) 

NSS错误5938消息通常意味着服务器终止您的连接。 你应该检查curl的目标服务器端日志,看看你的连接被杀死的原因。

这可能是“无法获得X的反向DNS主机名”这样简单的事情。