在 Linux 下使用 OpenSSL(或依赖 OpenSSL 的程序,如 curl、wget、git、Python requests 等) 报“证书错误”,通常不是 OpenSSL 本身有问题,而是证书校验失败。常见原因和对应解释如下:
OpenSSL 默认依赖系统的 CA 证书包(如 /etc/ssl/certs/ca-certificates.crt)。
表现
verify error:num=20:unable to get local issuer certificate
原因
ca-certificates解决
# Debian / Ubuntu
sudo apt update
sudo apt install ca-certificates
sudo update-ca-certificates
# CentOS / RHEL
sudo yum install ca-certificates
sudo update-ca-trust
表现
verify error:num=10:certificate has expired
原因
检查
date
如果时间不对:
sudo ntpdate pool.ntp.org
# 或
timedatectl set-ntp true
表现
self signed certificate
unable to verify the first certificate
原因
解决方式(任选)
临时测试:
curl -k https://example.com
openssl s_client -connect example.com:443 -no_verify
表现
unable to verify the first certificate
原因
验证
openssl s_client -connect example.com:443
如果 Verify return code: 21 或 unable to verify,通常是链不完整。
表现
hostname mismatch
原因
www.example.com,你访问 example.com旧版本不支持:
openssl version
例如:
certifi# 查看证书详情
openssl s_client -connect example.com:443
# 查看返回码
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates -subject
# 测试 HTTPS
curl -v https://example.com
你可以把具体的报错信息(完整几行)贴出来,我可以帮你精准判断是哪一种原因,并给出对应修复命令。