0

curl证书链不完整排查与修复方法

2026.06.02 | youres | 34次围观

问题现象:curl报错"SSL certificate problem"

用curl访问HTTPS网站时,突然报这个错:

curl: (60) SSL certificate problem: unable to get local issuer certificate

这不是网站的问题,是你本地curl找不到完整的证书链。本文用5个实战步骤,带你彻底搞清楚证书链不完整的原理、排查方法和修复方案。

什么是证书链不完整?

HTTPS证书不是单张证书,而是一条"链":

  • 叶子证书:分配给你的域名的证书
  • 中间证书:连接叶子证书和根证书的桥梁
  • 根证书:操作系统的信任库里内置的顶级证书

完整的证书链应该是:叶子证书 → 中间证书 → 根证书

如果服务器只配置了叶子证书,没配置中间证书,curl就会报错"unable to get local issuer certificate"。

步骤1:用curl -v查看证书链详情

先看看服务器返回的证书链到底缺了什么。用-v参数查看详细的SSL握手过程:

curl -v https://www.youres.cn

如果报错,会显示:

* SSL certificate verify result: unable to get local issuer certificate (20)

这说明curl无法验证服务器证书的签发者。

步骤2:用openssl查看证书链是否完整

curl底层用的是openssl,用openssl命令可以直接查看服务器返回的证书链:

openssl s_client -showcerts -connect www.youres.cn:443

如果输出里只有一段-----BEGIN CERTIFICATE-----,说明服务器只发了叶子证书,没发中间证书。正常的输出应该有2-3段证书(叶子证书 + 中间证书)。

步骤3:确认本地CA证书库是否完整

curl验证证书时,依赖本地的CA证书库。检查curl使用的CA证书库路径:

curl --version

如果本地CA证书库太旧,可能缺少新的根证书或中间证书。更新方法:

# Ubuntu/Debian
sudo apt update && sudo apt install --reinstall ca-certificates

# CentOS/RHEL
sudo yum reinstall ca-certificates

步骤4:修复服务器证书链配置(推荐方案)

最彻底的解决方法是让服务器返回完整的证书链。以Nginx为例:

错误配置(只配置叶子证书):

ssl_certificate /path/to/www.youres.cn.crt;  # 只有叶子证书
ssl_certificate_key /path/to/www.youres.cn.key;

正确配置(叶子证书 + 中间证书合并成一个文件):

# 合并叶子证书和中间证书
cat www.youres.cn.crt intermediate.crt > www.youres.cn.fullchain.crt

# Nginx配置
ssl_certificate /path/to/www.youres.cn.fullchain.crt;
ssl_certificate_key /path/to/www.youres.cn.key;

步骤5:临时绕过证书验证(不推荐,仅调试用)

如果急着调试,可以临时跳过证书验证(生产环境不要用):

# 方法1:用-k参数
curl -k https://www.youres.cn

# 方法2:指定不验证证书
curl --insecure https://www.youres.cn

总结

curl证书链不完整的问题,本质是服务器没有返回完整的证书链(叶子证书+中间证书)。排查步骤:

  1. curl -v查看SSL握手详情
  2. openssl s_client -showcerts确认证书链是否完整
  3. 检查本地CA证书库是否太旧
  4. 修复服务器配置,合并叶子证书和中间证书
  5. 临时调试可以用-k参数,但生产环境务必配置完整证书链

证书链完整不仅解决curl报错,还能兼容更多客户端。花5分钟配置好,省去无数调试时间。

相关文章推荐:

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

标签: curlSSL证书
发表评论