术语表

CA Bundle (CA 证书包)

最后核实

定义

CA Bundle 是把多张 PEM 证书拼接在一起的文件,既可能是服务器要发送的中间证书链,也可能是客户端信任的根证书集合。

“CA bundle”有两种常见含义。一些 CA 和代理商交付证书时附带 .ca-bundle 文件,里面是服务器 证书链 所需的中间证书;而在客户端一侧,CA bundle 指的是 信任库,即一个包含所有受信任根证书的 PEM 文件,例如 Debian/Ubuntu 上的 /etc/ssl/certs/ca-certificates.crt、RHEL 系发行版上的 /etc/pki/tls/certs/ca-bundle.crt。

为什么重要

大多数与 bundle 相关的错误都来自把这两种含义搞混。服务器端:中间证书 bundle 要拼接在网站证书之后(nginx),否则客户端会报缺少中间证书;在宝塔面板中,证书(PEM 格式)一栏应粘贴网站证书加中间证书的完整内容。客户端:各种工具需要知道使用哪个根证书 bundle,curl 用 --cacert,Python requests 读取 REQUESTS_CA_BUNDLE 环境变量,Node.js 通过 NODE_EXTRA_CA_CERTS 追加额外的根证书。企业内网使用私有 CA 时,常见做法就是用这些参数指定内部根证书,而不必改动系统信任库。

例子

cat example.com.crt example.com.ca-bundle > fullchain.pem
openssl crl2pkcs7 -nocrl -certfile fullchain.pem | openssl pkcs7 -print_certs -noout
curl --cacert /etc/ssl/certs/ca-certificates.crt https://example.com/

第一行为 nginx 拼接完整链,第二行列出文件中每张证书的主体和颁发者,第三行指定 curl 使用的根证书 bundle。

常见误区

  • CA bundle 里已经包含我的网站证书。 CA 给的中间证书 bundle 不含网站证书,需要自己按顺序拼接。
  • 名字叫 ca-bundle 的文件都是根证书集合。 它很可能只包含中间证书,使用前先列出内容确认。

延伸阅读