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

CLI下Curl/OpenSSL无法获取本地颁发者证书问题求助

解决方案:OpenSSL 无法获取本地颁发者证书(错误码20)

针对你在Ubuntu 5.4.0-42下遇到的这个问题,我整理了几个经过验证的可行方案,按优先级尝试:

1. 直接为OpenSSL指定系统CA证书文件

有时候OpenSSL默认没有正确加载系统的CA证书 bundle,你可以手动指定路径来测试:

openssl s_client -connect storage.googleapis.com:443 -CAfile /etc/ssl/certs/ca-certificates.crt

如果这个命令能成功验证证书,说明是默认路径的问题。可以通过设置环境变量永久解决:

# 临时生效,当前终端有效
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt

# 永久生效,添加到用户bash配置文件
echo 'export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt' >> ~/.bashrc
source ~/.bashrc

2. 检查并修复OpenSSL配置文件

OpenSSL的默认配置可能存在路径错误,打开/etc/ssl/openssl.cnf,定位到[ CA_default ]部分,确认以下配置项:

dir             = /etc/ssl              # 基础目录
certs           = $dir/certs            # 证书存放路径
CApath          = $dir/certs            # CA证书路径
CAfile          = $dir/certs/ca-certificates.crt  # 合并后的CA bundle文件

如果有配置错误,修改后保存,再重新测试连接。

3. 手动添加Google的根证书到系统CA

可能你的系统CA存储中缺少Google服务依赖的根证书(比如GTS Root R1),可以手动添加:

# 下载Google根证书
curl -O https://pki.goog/gtsr1.crt
# 转换为PEM格式(OpenSSL默认识别的格式)
openssl x509 -in gtsr1.crt -out gtsr1.pem -outform PEM
# 将证书复制到系统CA目录
sudo cp gtsr1.pem /usr/local/share/ca-certificates/
# 更新系统证书缓存
sudo update-ca-certificates

完成后再次测试openssl s_client -connect storage.googleapis.com:443。

4. 检查系统时间是否同步

证书验证对系统时间的准确性要求很高,如果系统时间和实际时间偏差过大(比如超过证书的有效期范围),也会触发验证失败。检查当前时间:

date

如果时间不正确,开启NTP同步:

sudo timedatectl set-ntp true

等待时间同步完成后再测试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:32:52