news 2026/4/25 22:00:53

在 Linux 系统中查看和管理信任库的方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Linux 系统中查看和管理信任库的方法

信任库是操作系统用来验证 TLS/SSL 证书(如 HTTPS 网站、API 调用)合法性的根证书集合。

不同发行版的 Linux 系统使用不同的机制来管理信任库,但核心思想是一致的:将自定义的 CA 证书放入特定的“源”目录,然后运行一个命令来更新系统最终使用的信任库


一、主流 Linux 发行版的信任库体系

1. RHEL / CentOS / Rocky / AlmaLinux (基于ca-certificates包)

这是 Red Hat 系列发行版的标准方式。

  • 工作流程:

    1. 放置证书: 将自定义 CA 证书(.crt.pem格式)复制到源目录
    2. 更新信任库: 运行update-ca-trust命令,该命令会读取所有源目录中的证书,并生成系统应用程序实际使用的信任库。
  • 关键目录和文件:

    目录/文件作用说明
    /etc/pki/ca-trust/source/anchors/主要源目录这是应该放置自定义 CA 证书的地方。放入此目录的证书会被无条件信任。
    /etc/pki/ca-trust/source/其他源目录此目录下还有其他子目录(如blacklist),用于更精细的控制。通常只需关注anchors
    /etc/pki/ca-trust/extracted/最终信任库这是系统和应用程序实际读取信任证书的地方。此目录由update-ca-trust命令自动生成和维护,请勿手动修改
    /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pemPEM 格式的信任链OpenSSL 库等工具通常会读取这个文件或其所在目录。
    /etc/pki/ca-trust/extracted/java/cacertsJava 格式的信任库Java 应用程序 (keytool) 使用的格式。
  • 操作命令:

    # 1. 将CA 证书 (例如 my-ca.crt) 复制到 anchors 目录sudocpmy-ca.crt /etc/pki/ca-trust/source/anchors/# 2. 更新系统信任库sudoupdate-ca-trust# 3. [可选] 验证证书是否已包含在信任库中# 查找证书的指纹 (Fingerprint)openssl x509-inmy-ca.crt-noout-fingerprint-sha256# 输出示例: SHA256 Fingerprint=AA:BB:CC:...# 在系统信任库中搜索该指纹openssl x509-in/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem-noout-fingerprint-sha256|grep"AA:BB:CC"
2. Ubuntu / Debian (基于ca-certificates包)

Debian 系列发行版使用一套类似的逻辑,但路径不同。

  • 工作流程:

    1. 放置证书: 将自定义 CA 证书复制到源目录
    2. 更新信任库: 运行update-ca-certificates命令来生成最终的信任库。
  • 关键目录和文件:

    目录/文件作用说明
    /usr/local/share/ca-certificates/主要源目录这是应该放置自定义 CA 证书的地方。放入此目录的证书会被信任。
    /etc/ssl/certs/最终信任库这是系统和应用程序实际读取信任证书的地方。此目录由update-ca-certificates命令管理。它包含大量以哈希值命名的证书软链接和一个聚合文件。
    /etc/ssl/certs/ca-certificates.crt聚合的信任链文件这是一个包含了/etc/ssl/certs/目录下所有证书的单一文件。很多工具(如curl,wget)默认会读取这个文件。
  • 操作命令:

    # 1. 将CA 证书 (例如 my-ca.crt) 复制到源目录sudocpmy-ca.crt /usr/local/share/ca-certificates/# 2. 更新系统信任库sudoupdate-ca-certificates# 3. [可选] 验证# 检查聚合文件是否包含自定义的证书grep-A20"Your CA's Subject"/etc/ssl/certs/ca-certificates.crt# 或者检查 /etc/ssl/certs/ 目录下是否有对应的软链接ls/etc/ssl/certs/|grep$(openssl x509-inmy-ca.crt-noout-subject_hash)

二、通用验证方法

无论使用哪个发行版,都可以通过以下方法来验证系统是否信任某个 CA。

1. 使用openssl s_client测试连接

这是最直接的方法,可以模拟一个 TLS 客户端。

# 如果服务使用自建 CA 签发的证书,此命令应返回 "Verify return code: 0 (ok)"openssl s_client-connectyour-service.internal:443-servernameyour-service.internal

如果返回Verify return code: 19 (self signed certificate in certificate chain)21 (unable to verify the first certificate),则说明系统不信任该 CA。

2. 检查环境变量

有些应用程序(特别是用 Pythonrequests库开发的)可能会被环境变量覆盖,从而不使用系统的信任库。

  • SSL_CERT_FILE: 指向一个特定的 CA bundle 文件。
  • SSL_CERT_DIR: 指向一个包含 CA 证书的目录。
  • CURL_CA_BUNDLE/REQUESTS_CA_BUNDLE: 专为curl和 Pythonrequests库设置的变量。

在排查问题时,请检查这些变量是否被设置:

env|grep-icert
3. 查看 OpenSSL 的默认配置

OpenSSL 库本身也有配置文件,可以指定 CA 路径。

# 查看 OpenSSL 配置文件位置openssl version-a|grepOPENSSLDIR# 通常配置文件在 $OPENSSLDIR/openssl.cnf# 在配置文件中查找 [CA_default] 段落下的 cafile 或 cadir 选项

三、总结与最佳实践

任务RHEL/CentOS 系列Ubuntu/Debian 系列
放置自定义 CA 证书/etc/pki/ca-trust/source/anchors//usr/local/share/ca-certificates/
更新信任库命令sudo update-ca-trustsudo update-ca-certificates
系统信任库主目录/etc/pki/ca-trust/extracted//etc/ssl/certs/
常用聚合文件/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem/etc/ssl/certs/ca-certificates.crt

重要注意事项:

  • 容器化环境: 在 Docker 或 Podman 容器中,容器拥有自己独立的文件系统。您必须将宿主机的信任库挂载到容器内,或者在构建镜像时就将 CA 证书加入其中。
  • Java 应用: Java 有自己的信任库 (cacerts),通常位于$JAVA_HOME/lib/security/cacerts。即使系统信任了 CA,Java 应用也可能不信任。需要使用keytool命令单独导入。
  • 浏览器: Firefox 和 Chrome/Chromium 通常有自己独立的信任库,不会完全遵循系统设置。对于内部网站,可能需要在浏览器中手动导入 CA 证书。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 21:57:22

【Hot 100 刷题计划】 LeetCode 98. 验证二叉搜索树 | C++ 指针边界法

LeetCode 98. 验证二叉搜索树 📌 题目描述 题目级别:中等 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 严格小于 当前节点的数。节点的右子树只包含 严格大于…

作者头像 李华
网站建设 2026/4/25 21:57:19

如何做性能压测

在做性能压测之前,首先我们需要明白我们压测的目标是什么?是性能摸底? 还是测试是否满足设计指标,你可能会有疑问,这两个有什么不同吗? 性能摸底:测试机器最大处理能力,比如cpu已经…

作者头像 李华
网站建设 2026/4/25 21:52:27

嵌入式AI开发新范式(ARM Cortex-M7 + 量化LoRA微调实录)

更多请点击: https://intelliparadigm.com 第一章:嵌入式AI开发新范式导论 传统嵌入式AI开发长期受限于资源约束、工具链割裂与部署闭环缺失,而新一代范式正以“模型-硬件-运行时”协同设计为核心,推动AI能力从云端下沉至MCU级…

作者头像 李华
网站建设 2026/4/25 21:51:05

机器学习重采样方法:原理、实现与工程实践

1. 理解重采样方法的核心价值在机器学习实践中,我们经常面临一个根本性矛盾:模型需要在训练数据上学习规律,但最终要在未见过的数据上表现良好。这就引出了机器学习中最关键的挑战之一——如何准确评估模型在真实场景中的表现?重采…

作者头像 李华