温馨提示×

linux openssl为何不信任

小樊
73
2026-09-07 15:03:49
栏目: 云计算

在 Linux 上使用 OpenSSL 时,“不信任(unable to verify the certificate / self signed / unknown issuer)”是非常常见的问题。下面从原理 → 常见原因 → 排查方法 → 解决办法系统说明。


一、OpenSSL 信任机制简介

OpenSSL 本身不“信任”任何证书,它依赖:

  • CA 证书库(信任锚)
  • 通常是系统目录:/etc/ssl/certs
  • 由包管理:ca-certificates

流程:

服务器证书
   ↓
中间 CA
   ↓
根 CA(必须在信任库里)

只要中间某一环找不到或不受信任,OpenSSL 就会报不信任。


二、常见“不信任”原因(重点)

1️⃣ 系统没有该 CA 证书(最常见)

例如:

  • 私有 CA
  • 内部公司 CA
  • 自签证书

✅ 表现:

verify error:num=20:unable to get local issuer certificate

✅ 解决:

# 将 CA 证书放入
/etc/ssl/certs/

# 更新信任库
update-ca-certificates

2️⃣ OpenSSL 没指定 CA 路径

OpenSSL 不会自动用系统库,除非你告诉它。

❌ 错误用法:

openssl s_client -connect example.com:443

✅ 正确用法:

openssl s_client -connect example.com:443 -CApath /etc/ssl/certs

或:

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

3️⃣ 证书链不完整(服务器配置问题)

服务器只发了自己的证书,没发中间 CA。

✅ 表现:

verify error:num=21:unable to verify the first certificate

✅ 解决(服务端):

  • Nginx / Apache 合并:
cat domain.crt intermediate.crt root.crt > fullchain.crt

4️⃣ 证书过期或被吊销

openssl x509 -in cert.pem -noout -dates

5️⃣ 系统 CA 包未安装或损坏

Debian / Ubuntu:

dpkg -l | grep ca-certificates

安装:

apt install ca-certificates

RHEL / CentOS:

yum install ca-certificates
update-ca-trust

6️⃣ OpenSSL 版本太旧(不支持新算法)

例如:

  • TLS 1.3
  • ECDSA
  • 新根 CA

检查:

openssl version

三、快速排查命令(实用)

测试 HTTPS 信任

openssl s_client -connect example.com:443 -servername example.com

看验证结果

openssl verify cert.pem

指定 CA 验证

openssl verify -CAfile ca.crt cert.pem

四、典型错误对照表

错误 原因
num=20 找不到 issuer
num=21 证书链不完整
self signed 根证书不受信任
certificate expired 过期

五、总结一句话

OpenSSL 不信任,99% 是因为:CA 不在信任库 / 没指定 CA / 证书链不全

如果你愿意,可以:

  • 贴出 openssl s_client 输出
  • 说明是 客户端 / 服务端 / 自签 / 内网

我可以直接帮你定位是哪一类问题。

0 踩