# 信任库（Trust Store，根证书库）是什么？

> 信任库是操作系统、浏览器或编程语言运行时内置的一组根 CA 证书，验证证书链时以它们作为信任锚。

Source: https://ssl.sh/zh/glossary/trust-store/
Last updated: 2026-11-10

信任库是 TLS 客户端认可为证书链终点的 [根证书](https://ssl.sh/zh/glossary/root-certificate/) 列表。主流信任库由各 [根证书计划](https://ssl.sh/zh/glossary/root-program/) 维护：Windows 用微软的，macOS 和 iOS 用苹果的，Firefox 用 Mozilla 的 NSS 列表（大多数 Linux 发行版的 ca-certificates 包也以它为基础），Chrome 则有自己的 Chrome Root Store。编程语言运行时也可能自带信任库：Java 有 `cacerts`，Python 的 `certifi` 包和 Node.js 内置的都是 Mozilla 列表的副本。

## 为什么重要
证书“受不受信任”完全取决于客户端用的是哪个信任库。同一个网站，浏览器里正常，换到 ca-certificates 包过旧的 Docker 镜像、老版本 Java 或锁死版本的 certifi 里就可能报错。根证书的移除决定也要通过信任库更新才能落到用户设备上，所以更新信任库和打安全补丁同样重要。内网服务要建立信任，正确做法是把自己的 [私有 CA](https://ssl.sh/zh/glossary/private-ca/) 根证书加入相应的信任库。老旧安卓机型和长期不升级的物联网设备信任库更新很慢，服务换用新根证书前需要提前在这些设备上测试。

## 例子
在 Debian/Ubuntu 上把内部根证书加入系统信任库：

```bash
sudo cp internal-root.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
```

Java 等运行时仍需单独导入。

## 常见误区
- **一台电脑只有一个信任库。** 浏览器、操作系统、Java、Python、Node.js 可能各用各的。
- **把缺失的中间证书加进信任库就能解决问题。** 这只是掩盖了服务器配置错误，应让服务器发送完整的中间证书。
- **测试时关闭证书校验无所谓。** `curl -k`、`verify=False` 会彻底关闭身份验证，而且常常被带进生产代码。

## 相关术语

- [根证书](https://ssl.sh/zh/glossary/root-certificate/): 根证书是位于证书链顶端、由 CA 自签名的证书，预装在操作系统或浏览器的信任库中，作为验证其他证书的信任锚。
- [CA Bundle](https://ssl.sh/zh/glossary/ca-bundle/): CA Bundle 是把多张 PEM 证书拼接在一起的文件，既可能是服务器要发送的中间证书链，也可能是客户端信任的根证书集合。
- [根证书计划](https://ssl.sh/zh/glossary/root-program/): 根证书计划是浏览器或操作系统厂商用来决定其信任库收录、限制或移除哪些根 CA 的政策与流程。
- [证书链](https://ssl.sh/zh/glossary/certificate-chain/): 证书链是从网站终端证书经中间证书一直到受信任根证书的有序证书序列，每一张都由下一张签名。
- [私有 CA](https://ssl.sh/zh/glossary/private-ca/): 私有 CA 是企业为自己的系统和设备搭建的证书颁发机构，其根证书只在企业主动安装的设备上受信任。
- [CCADB](https://ssl.sh/zh/glossary/ccadb/): CCADB 是通用 CA 数据库，CA 在这里向各根证书计划披露其根证书、中间证书、审计报告、政策文件和 CRL 地址。
