在 Linux 安全领域,证书机构(CAs)作为可信的第三方,负责验证网站、服务器和客户端的身份。Ubuntu 预装了一组可信的根证书,但了解如何检查、验证和检查这些证书是系统管理员和开发人员的一项关键技能。本指南涵盖了 CA 证书的存储位置、如何列出它们以及如何使用标准命令行工具验证其有效性。

2025.10 山西·阳泉·娘子关镇

CA 证书存储在哪里?

在 Ubuntu(以及大多数基于 Debian 的系统)中,受信任的 CA 证书存储在几个特定的位置:

  • **/etc/ssl/certs/**:这是 OpenSSL 和其他应用程序查找受信任证书的主要目录。它包含单个证书文件和指向实际证书的符号链接(通常以哈希值命名)。
  • /etc/ssl/certs/ca-certificates.crt:这是一个单个连接文件 ,包含系统上所有受信任的 CA 证书。许多应用程序(如 Python requests 或 curl)使用此特定文件,而不是扫描整个目录。
  • **/usr/share/ca-certificates/**:此目录存放由 ca-certificates 软件包提供的原始证书文件。

列出所有已安装的 CA 证书

由于主包是一个单一文件,您不能简单地“读取”它来查看名称列表。但是,您可以使用 awkopenssl 从包中的每个证书中提取“Subject”(组织名称)。

在您的终端中运行以下命令:

1
awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt

这是做什么的:

  1. 它读取包文件 /etc/ssl/certs/ca-certificates.crt
  2. 它将文件分割为单个证书(由 BEGIN 分隔)。
  3. 它将每个证书通过管道传输到 openssl 以提取并打印 Subject 行。

您将看到类似以下的输出:

1
2
3
subject= /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
subject= /C=US/O=Internet Security Research Group/CN=ISRG Root X1
...

检查特定证书

如果您想检查特定的 CA(例如“Let’s Encrypt”或企业内部 CA)是否当前被您的系统信任,您可以使用 grep 来搜索证书包。

按名称搜索

验证“ISRG Root X1”(Let’s Encrypt 的根证书)是否受信任:

参见: 精通 Linux 命令行 — 您的完整免费培训指南

1
grep -i "ISRG Root X1" /etc/ssl/certs/ca-certificates.crt
  • 如果返回文本 :证书名称存在于包中。
  • 如果返回为空 :证书可能未安装或未被信任。

通过文件搜索

如果你有一个特定的证书文件(例如,my-cert.pem),并想检查其详细信息,请使用 openssl

1
openssl x509 -in my-cert.pem -text -noout
  • in: 输入文件。
  • text: 以纯文本形式打印证书详细信息(有效期、颁发者、主题等)。
  • noout: 防止输出编码的证书本身。

验证服务器证书与 CA 存储库

有时候问题不在于证书本身,而在于你的系统是否信任远程服务器。你可以使用 openssl s_client 工具来测试这一点。

要检查你的 Ubuntu 系统是否信任 google.com

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

分析输出:

  • 查找输出末尾的验证返回码
  • 成功: 验证返回码: 0 (ok) — 这意味着您的系统信任了为 Google 证书签名的 CA。
  • 失败: Verify return code: 19 (self signed certificate in certificate chain) 或类似错误表示存在信任问题。

如何添加新的自定义 CA 证书

如果您需要信任一个自定义的 CA(例如,用于公司内部网络或本地开发环境),您不应该手动编辑 /etc/ssl/certs 文件。相反,应该使用 update-ca-certificates 工具。

  1. 将您的证书 (必须为 .crt 扩展名)复制到共享文件夹: sudo cp my-custom-ca.crt /usr/local/share/ca-certificates/
  2. 更新证书存储库 : sudo update-ca-certificates

你应该看到输出表明已添加1个证书。这会自动更新 /etc/ssl/certs/ca-certificates.crt 并创建必要的符号链接。

摘要命令表

操作 命令
列出所有 CA 主题 awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print}
检查证书文件 openssl x509 -in [filename] -text -noout
验证远程站点 openssl s_client -connect [domain]:443
更新 CA 存储库 sudo update-ca-certificates

原文链接:How to Check and Verify CA Certificates in Ubuntu Linux