当我从命令行运行curl
curl "https://example.com"
它立即成功,返回请求的结果。
当我运行相同的wget命令
wget https://example.com
它最终超时与“无法build立SSL连接”。 没有任何具体的错误信息。 它连接,但不能做SSL握手。 我尝试了--no-check-certificate但没有任何区别 – 它似乎是超时相关的。
然而:
wget http://example.com
工作正常(HTTP与HTTPS)。
这也影响了PHP的“ file() ”方法调用。
我的问题是,什么会导致curl成功检索一个页面(对于我们的域名中的所有网站),而不是wget或php解释器? 这是周末的一个新问题,服务器之前是好的。
(操作系统是Red Hat Enterprise Linux 6.4)
这看起来像是selectSSL协议的问题。 出于某种原因,服务器对协议很挑剔。 有些客户恰好做出了正确的猜测,有些客户则没有。
用wget ,试试吧。 --secure-protocol=tlsv1或--secure-protocol=sslv3 。 有关更多详细信息,请参阅GNU Wget手册页 。
用PHP, 在SO上看到这个问题 。
在红帽企业Linux 6.x及以前的主要版本上, wget不支持服务器名称指示 ,这是正确访问越来越多的TLS / SSL安全网站(很可能包括您的网站)所必需的。 另一方面,RHEL 6的curl确实支持SNI。
红帽知道这个问题,并在RHEL 6.6中发布了一个修复程序 。 RHEL 7.0中也解决了这个问题。
从表面上看,这当然没有什么意义。 第一步是确认wget是否可以用于ssl(你可以用wget打其他ssl站点吗?)。
如果不是,请将其作为wget问题追踪
(请注意,如果您尝试使用四个不同的站点w wget,并且其中两个站点中断,则仍然是wget问题)
另一个诊断:浏览器对httpsurl做了什么? (铬和ffox) – 他们给警告还是干净地连接?
在Centos 6.5上最新(1.15)
我不得不编译wget 1.15然后replaceyum的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