Axios提示"certificate has expired"但证书实际未过期的原因排查问询
Axios Linux环境提示未过期证书已过期的根因与修复方案
1. 最常见原因:Linux系统根证书库未包含Let's Encrypt有效根证书
Let's Encrypt旧的DST Root CA X3根证书已于2021年9月到期,目前有效根证书为ISRG Root X1。旧版本Linux发行版的ca-certificates包如果长期未更新,会缺失ISRG Root X1,或者仍优先校验过期的DST根证书,触发过期报错。Windows系统的根证书默认自动更新,因此同环境可正常请求。
修复方法:
- Debian/Ubuntu系列执行:
sudo apt update && sudo apt install ca-certificates - CentOS/RHEL系列执行:
sudo yum update ca-certificates - 更新完成后执行
sudo update-ca-certificates(Debian/Ubuntu)或sudo update-ca-trust(CentOS/RHEL)刷新系统根证书库
2. Node.js内置根证书列表过旧
Node.js默认使用自身内置的根证书列表而非完全依赖系统根证书,低于v16.x的长期维护版本可能未内置ISRG Root X1根证书,导致证书校验失败。
修复方法:
- 升级Node.js到v16.x及以上的LTS版本
- 若不方便升级Node版本,可手动指定Node加载系统根证书库:启动脚本时添加环境变量
NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt,例如NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt node your_script.js
3. Linux本地hosts绑定了错误的站点IP
双引导设备的Linux与Windows系统hosts配置相互独立,若Linux的hosts文件中手动绑定了API域名的旧IP,该IP对应的站点可能部署了过期证书,就会出现同域名不同系统请求结果不一致的情况。
修复方法:
- 执行
cat /etc/hosts检查是否存在API域名的手动绑定记录,若存在则删除对应条目即可
4. 请求链路存在透明代理篡改证书
部分网络环境下Linux系统可能配置了全局透明代理,代理返回的自签名证书已过期,而Windows系统未配置对应代理,直接请求获取了真实有效证书。
修复方法:
- 执行
echo $http_proxy $https_proxy检查系统代理配置,清除无效代理即可 - 若为必须使用的代理,将代理的根证书导入系统根证书库即可
5. API服务端证书链配置不完整
若API服务端仅部署了域名证书,未配置中间证书,Windows系统会自动拉取缺失的中间证书完成校验,而Linux/Node.js不会自动补全,就会出现校验失败的情况。
修复方法:
- 联系API提供方补全证书链配置,将Let's Encrypt的中间证书和域名证书合并部署即可
- 也可手动将API的中间证书导入本地系统根证书库临时解决
内容的提问来源于stack exchange,提问作者J23
相关产品推荐
相关产品推荐

