curl 成功完成 https 请求,而 wget 失败

curl 成功完成 https 请求,而 wget 失败

当我curl从命令行运行时

curl "https://example.com"

它立即成功并返回请求的结果。

当我运行相同的 wget 命令时

wget https://example.com

它最终超时并显示“无法建立 SSL 连接”,没有任何具体错误消息。它连接了,但无法进行 SSL 握手。我试过了,--no-check-certificate但没什么效果 - 似乎与超时有关。

然而:

wget http://example.com

运行良好(HTTP 与 HTTPS)。

这也影响了PHP 的“ file()方法调用。

我的问题是,是什么原因导致 curl 能够成功检索页面(针对我们域中的所有站点),但 wget 或 php 解释器却无法检索?这是周末出现的新问题,之前服务器都很好。

(操作系统为Red Hat Enterprise Linux 6.4)

答案1

这似乎是选择 SSL 协议时出现的问题。出于某种原因,服务器对协议很挑剔。有些客户端碰巧猜对了,有些则猜错了。

使用wget,例如尝试--secure-protocol=tlsv1--secure-protocol=sslv3。有关更多详细信息,请参阅GNU Wget 手册页

使用 PHP,请参阅这个问题

答案2

在 Red Hat Enterprise Linux 6.x 及之前的主要版本中,wget不支持服务器名称指示,这是正确访问越来越多受 TLS/SSL 保护的网站(可能包括您的网站)所必需的。另一方面,curlRHEL 6 确实支持 SNI。

Red Hat 已意识到此问题在 RHEL 6.6 中发布了修复。该问题也在 RHEL 7.0 中得到修复。

答案3

从表面上看,这当然没有什么意义。第一步是确认 wget 是否适用于 ssl(您可以使用 wget 访问其他 ssl 站点吗?)。

如果不是:将其作为 wget 问题进行追踪

(请注意,如果您使用 wget 尝试了四个不同的 SSL 站点,其中两个中断了,那么这仍然是 wget 问题)

另一种诊断:浏览器对 https url 做了什么?(chrome 和 ffox)——它们会发出警告还是干净地连接?

答案4

Centos 6.5 上的 wget 最新版(1.15)

我必须编译 wget 1.15,然后替换 yum 的 wget

wget http://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz
tar -zxvf wget-1.15.tar.gz
cd wget-1.15
./configure --prefix=/usr/local/bin --with-ssl=openssl
# replace wget, confirm
cp /usr/local/bin/wget /usr/bin/wget

相关内容