Ubuntu 上如何列出系统信任的所有 CA 证书?

系统 CA 证书合集在 /etc/ssl/certs/ca-certificates.crt;用 awk + openssl 逐张列出 subject;单张查看用 openssl x509 -text;查看某网站实际发来的证书链用 openssl s_client -showcerts。本文给出命令。

最佳实践
Ubuntu 上如何列出系统信任的所有 CA 证书?封面

列表命令:系统的 CA 信任库合集文件在 /etc/ssl/certs/ca-certificates.crt(多张证书拼接的 PEM 文件)。逐张打印 subject 的一行流:

openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt | \
  openssl pkcs7 -print_certs -noout

其他常用查看方式

# 目录视图(每张证书一个软链)
ls /etc/ssl/certs/ | head -20

# 查看某一张的完整信息(有效期、签发者、指纹)
openssl x509 -in /etc/ssl/certs/ISRG_Root_X1.pem -noout -text | less

# 只看有效期
openssl x509 -in /etc/ssl/certs/xxx.pem -noout -dates

查看服务器实际发来的证书链

排查"系统里有根证书但还是报不受信"时,问题常在服务端没发中间证书。看对方实际发来的链:

openssl s_client -showcerts -connect example.com:443 </dev/null

输出里 Certificate chain 一节列出服务端发来的每一张;缺中间证书就要在服务端补 fullchain。

增删自定义 CA

# 验证来源/指纹后添加企业 CA;每个 .crt 文件放一张 PEM 证书
sudo cp my-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# 删除:从该目录移除后再 update-ca-certificates --fresh

常见问题(FAQ)

Q:ca-certificates.crt 和 /etc/ssl/certs/ 目录什么关系?
A:目录里是逐张证书(软链),.crt 合集是它们的拼接版,多数程序用合集,部分 OpenSSL 客户端使用哈希证书目录;Java 通常使用自己的 truststore,不是直接读取此目录。

Q:更新 CA 列表的包叫什么?
A:ca-certificates 包,sudo apt install --reinstall ca-certificates 可修复损坏的信任库。

Q:Java 应用不认系统 CA?
A:先检查实际 JVM、javax.net.ssl.trustStore 与应用自定义 SSLContext;Ubuntu 的 ca-certificates-java 可同步系统信任到 Java 存储,但并非所有 JVM 都使用它,必要时才向目标 truststore 导入。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台