CentOS7下wget 1.14访问HTTPS站点无法建立SSL连接如何解决
故障原因分析
- 低版本工具TLS协议不兼容:CentOS 7默认自带的wget 1.14搭配的系统OpenSSL版本最高仅支持TLS 1.2,且默认协商优先级优先使用TLS 1.0/1.1,目前绝大多数HTTPS站点已停用低版本TLS协议支持,握手协商失败触发超时
- 缺失SNI支持:wget 1.14默认未开启SNI(服务器名称指示)扩展,若目标站点是多域名共享同个IP的虚拟主机,服务端无法识别要返回哪个域名的SSL证书,会直接中断握手流程
- 网络层面SSL报文拦截:本地防火墙、出口安全组或运营商网络对HTTPS握手报文存在规则拦截,仅放通了443端口的TCP连接,未放通后续的SSL协商报文
- MTU不匹配:当前网络出口MTU大于目标站点链路的MTU,SSL握手阶段的大包被丢弃导致超时
可行解决方案
方案1:强制指定wget使用TLS 1.2协议发起请求
执行命令:wget --secure-protocol=TLSv1_2 https://www.example.com/
如果需要跳过证书校验可一并添加对应参数:wget --no-check-certificate --secure-protocol=TLSv1_2 https://www.example.com/
方案2:升级wget到更高版本
CentOS 7默认源的wget版本过低,可编译安装1.19及以上版本的wget,高版本默认支持SNI、TLS 1.3等新特性,适配绝大多数现代HTTPS站点:
# 安装编译依赖 yum install -y gcc openssl-devel # 下载wget 1.21以上版本源码包解压后进入目录执行 ./configure --with-ssl=openssl make && make install
升级完成后再执行原下载命令即可。
方案3:排查网络层面拦截
先测试443端口的SSL连通性,执行openssl s_client -connect www.example.com:443 -servername www.example.com:
- 如果该命令也超时,说明是网络层面拦截,需要联系运维放行本地到目标站点443端口的HTTPS流量,关闭对SSL协商报文的拦截规则
- 若上述openssl命令返回正常证书信息,说明是wget工具本身的问题,按方案1或2处理即可
方案4:调整网络MTU值
如果是跨运营商或专线网络场景,可尝试将本地网卡MTU值调整为1400测试(将命令中eth0替换为实际业务网卡名):ifconfig eth0 mtu 1400
内容的提问来源于stack exchange,提问作者Suchit
相关产品推荐
相关产品推荐

