我无法https://www.sicdm.caixa.gov.br/cadmut/login_internet_form.do
在 CentOS 6.2 服务器上下载 curl。
该命令curl -v -k -3 https://www.sicdm.caixa.gov.br/cadmut/login_internet_form.do
产生的结果:
* About to connect() to www.sicdm.caixa.gov.br port 443 (#0)
* Trying 200.201.173.93... connected
* Connected to www.sicdm.caixa.gov.br (200.201.173.93) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* skipping SSL peer certificate verification
* NSS error -5938
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error
到目前为止我已经尝试过:
1)在其他提供商托管的服务器、我的 Linux 开发机器上以及我的队友的机器上发出完全相同的 curl 命令:页面下载正常;
2)用 google 搜索NSS error -5938
,没有提供任何有用的提示。
3)放弃 curl 并使用 wget:不起作用,因为远程服务器使用 Transfer-Encoding:chunked,而 wget 无法使用它。
4) 升级/降级/编译最新版本的 Curl、NSS 和 OpenSSL:问题仍然存在。
5) 向服务器提供商报告问题。首先他们声称这是远程服务器证书的问题;我对此表示怀疑,因为我已经告诉 curl 忽略证书验证(-k 标志)。
6) 提取该连接的 tcpdump,其中发现一些“有趣”的东西(上面的捕获):
存在许多传输错误,并且服务器对“客户端密钥交换”阶段的响应从未到达我们的服务器 - 即使 ACK 数据包到达! - 请注意数据包 46 和 47 之间的 30 秒间隙。(即使禁用防火墙也会发生这种情况)
为了进行比较,卷曲 paypal(较低的捕获)就很好了。
7) 重新联系服务器提供商,并显示 tcpdump 的结果。他们对转储没有评论,但表示他们在网络上的其他服务器上尝试了该命令,但命令以相同的方式失败。尽管如此,他们仍然声称问题出在远程服务器证书糟糕以及我处理它的方式上。
那么,我遗漏了什么?
PS:以下是一些版本号:
curl -v
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2 协议:tftp ftp telnet dict ldap ldaps http file https ftps scp sftp 功能:GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
uname -a
Linux [删除的主机名] 2.6.32-220.23.1.el6.x86_64 #1 SMP 2012 年 6 月 18 日星期一 18:58:52 BST x86_64 x86_64 x86_64 GNU/Linux