术语表

信任库 (Trust Store,根证书库)

最后核实

定义

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

信任库是 TLS 客户端认可为证书链终点的 根证书 列表。主流信任库由各 根证书计划 维护: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 根证书加入相应的信任库。老旧安卓机型和长期不升级的物联网设备信任库更新很慢,服务换用新根证书前需要提前在这些设备上测试。

例子

在 Debian/Ubuntu 上把内部根证书加入系统信任库:

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

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

常见误区

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

延伸阅读