在几个 CentOS 机器上的 cURL 和 PHP 有一个奇怪的问题。
在本地,我正在运行 CentOS 6.3。远程是 CentOS 5.9
在本地,盒子接收请求,scp 将文件发送到远程服务器,然后通过 PHP 向远程服务器执行 cURL 请求以发送一些信息。请求总是在当天的第一次尝试时失败。后续请求工作正常。Remote 有一个有效的 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
谷歌搜索错误也无济于事。看起来 twitter 也遇到了类似的问题(https://dev.twitter.com/discussions/1549),他们显然已经解决了这个问题,但没有详细说明它是如何解决的。
任何关于在哪里查看/如何减轻问题的想法将不胜感激。
这是使用 NSS 编译的 curl 的一般问题(仅在没有 nss 的情况下编译的 redhat-linuxes、debian 和 suse curl 包)。你需要从没有 nss-library 的源代码编译 curl。
所以,我还没有解决 https-connections 如何与 nss-curl 一起工作的问题。
我在使用过时的 CentOS 6.x 系统连接到停止接受 TLS 1.0,只允许 TLS 1.1 及更高版本的嵌入式设备时遇到了类似的“NSS 错误 -5938”。我的解决方案是做一个
yum update
. 我看到发生了这些更新:我认为这可能是帮助的具体变化:
NSS 错误 5938 消息通常意味着服务器终止了您的连接。您应该检查 curl 目标的服务器端日志,以了解您的连接被终止的原因。
它可能像“无法获得 X 的反向 dns 主机名”一样简单。