Ubuntu 上如何列出系统信任的所有 CA 证书?
系统 CA 证书合集在 /etc/ssl/certs/ca-certificates.crt;用 awk + openssl 逐张列出 subject;单张查看用 openssl x509 -text;查看某网站实际发来的证书链用 openssl s_client -showcerts。本文给出命令。
列表命令:系统的 CA 信任库合集文件在 /etc/ssl/certs/ca-certificates.crt(多张证书拼接的 PEM 文件)。逐张打印 subject 的一行流:
awk -v cmd='openssl x509 -noout -subject' \
'/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt
其他常用查看方式
# 目录视图(每张证书一个软链)
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
sudo cp my-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
# 删除:从该目录移除后再 update-ca-certificates --fresh
观测云对照
证书问题的另一面是拨测视角。 观测云拨测从外部验证 HTTPS 握手与证书链完整性,与服务器端日志互补——客户端看到的证书问题(链不全、过期)第一时间告警。
常见问题(FAQ)
Q:ca-certificates.crt 和 /etc/ssl/certs/ 目录什么关系?
A:目录里是逐张证书(软链),.crt 合集是它们的拼接版,多数程序用合集,部分(如某些 Java 应用)用目录。
Q:更新 CA 列表的包叫什么?
A:ca-certificates 包,sudo apt install --reinstall ca-certificates 可修复损坏的信任库。
Q:Java 应用不认系统 CA?
A:Java 用自己的 keystore(cacerts),需用 keytool 单独导入企业 CA。