You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS6访问Let's Encrypt站点wget证书校验失败curl正常问题问询

差异原因分析
  • 依赖的TLS底层库不同
    你使用的CentOS 6.10环境中,curl和wget分别编译绑定了不同的TLS实现:
    从curl的运行日志可见其使用NSS 3.44作为TLS底层库,而CentOS 6官方源提供的wget默认编译绑定的是OpenSSL 1.0.1e版本。
  • 证书链校验逻辑的差异是核心诱因
    Let's Encrypt在DST Root CA X3根证书过期后,为了兼容旧安卓设备,默认提供的证书链包含两条信任路径:
  1. 站点证书 → R3中间证 → ISRG Root X1(有效根证书,已包含在主流CA信任库中)
  2. 站点证书 → R3中间证 → ISRG Root X1 → 交叉签名的DST Root CA X3(已过期)
    两个TLS库的校验逻辑不同:

OpenSSL 1.0.1e的校验逻辑为:只要证书链中存在任意一个已过期的根证书,直接判定整个证书校验失败,不会尝试查找其他有效信任路径。即使你的CA bundle中已经包含了有效的ISRG Root X1根证书,wget调用OpenSSL校验时仍会识别到链中过期的DST Root CA X3,返回证书过期错误。
NSS 3.44的校验逻辑为:只要能找到任意一条到信任根的有效路径,就判定校验通过。它会识别到CA bundle中有效的ISRG Root X1根证书,忽略链中附带的过期DST Root CA X3分支,因此curl的证书校验可以正常通过。

  • 手动指定CA文件不生效的原因
    你为wget强制指定CA文件仍报错,是因为问题并非CA文件中缺失ISRG Root X1根证书,而是OpenSSL 1.0.1e本身的校验逻辑缺陷,和CA证书列表的内容无关。
临时解决方案

如果需要让wget也能正常校验Let's Encrypt证书,可以用以下两种方式:

  1. 手动从系统CA bundle中删除已过期的DST Root CA X3证书,之后OpenSSL就不会识别到过期根,会走ISRG Root X1的有效路径完成校验
  2. 运行wget时添加--no-check-certificate参数跳过证书校验(仅建议用于测试场景)

内容的提问来源于stack exchange,提问作者laurent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:54:05