curl提示SSL证书已过期但实际证书有效,应如何解决?
可行解决方案
这个问题本质是老系统中仍然保留了已过期的DST Root CA X3根证书,证书校验时会优先匹配到这个过期根证书,所以即使更新了根证书包也会校验失败,可按以下优先级尝试修复:
方案1:删除过期的DST Root CA X3根证书后重建证书缓存
- Debian/Ubuntu 系列操作系统
- 注释掉旧根证书配置:执行
sed -i 's/^mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/' /etc/ca-certificates.conf - 重建根证书缓存:执行
update-ca-certificates -f
- 注释掉旧根证书配置:执行
- RHEL/CentOS 系列操作系统
- 移除旧根证书文件:执行
rm /etc/pki/ca-trust/source/blacklist/DST_Root_CA_X3.pem 2>/dev/null - 重建根证书缓存:执行
update-ca-trust extract
- 移除旧根证书文件:执行
方案2:强制curl指定使用最新根证书包
首先确认你的curl默认读取的根证书路径:执行curl -v https://www.baidu.com 2>&1 | grep CAfile查看默认加载的证书路径。
- 临时测试:在curl请求后添加
--cacert /etc/ssl/certs/cacert.pem参数即可 - 永久生效:编辑
~/.curlrc(当前用户生效)或/etc/curlrc(全局生效),添加一行配置cacert = /etc/ssl/certs/cacert.pem即可
方案3:已停止维护的老旧系统专属修复
如果是CentOS 6、Debian 8等官方已停止更新的系统,需手动添加ISRG Root X1根证书:
- 手动下载ISRG Root X1根证书,放入
/usr/local/share/ca-certificates/目录,命名为isrgrootx1.crt - 执行对应系统的根证书缓存更新命令即可
注意:不推荐直接使用
-k/--insecure参数跳过证书校验,会存在数据被窃听/篡改的安全风险。
内容的提问来源于stack exchange,提问作者Jakob
相关产品推荐
相关产品推荐

