# CA Bundle（CA 证书包）是什么？定义、例子与常见误区

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

Source: https://ssl.sh/zh/glossary/ca-bundle/
Last updated: 2026-11-10

“CA bundle”有两种常见含义。一些 CA 和代理商交付证书时附带 `.ca-bundle` 文件，里面是服务器 [证书链](https://ssl.sh/zh/glossary/certificate-chain/) 所需的中间证书；而在客户端一侧，CA bundle 指的是 [信任库](https://ssl.sh/zh/glossary/trust-store/)，即一个包含所有受信任根证书的 [PEM](https://ssl.sh/zh/glossary/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 时，常见做法就是用这些参数指定内部根证书，而不必改动系统信任库。

## 例子
```bash
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 的文件都是根证书集合。** 它很可能只包含中间证书，使用前先列出内容确认。

## 相关术语

- [信任库](https://ssl.sh/zh/glossary/trust-store/): 信任库是操作系统、浏览器或编程语言运行时内置的一组根 CA 证书，验证证书链时以它们作为信任锚。
- [证书链](https://ssl.sh/zh/glossary/certificate-chain/): 证书链是从网站终端证书经中间证书一直到受信任根证书的有序证书序列，每一张都由下一张签名。
- [中间证书](https://ssl.sh/zh/glossary/intermediate-certificate/): 中间证书是由根证书（或上级中间证书）签发、用来签发网站证书的 CA 证书，服务器必须把它和网站证书一起发送给客户端。
- [fullchain](https://ssl.sh/zh/glossary/fullchain/): fullchain 是依次包含站点证书和中间证书的 PEM 文件，让客户端能把站点证书连到受信任的根证书。
- [PEM](https://ssl.sh/zh/glossary/pem/): PEM 是一种把 DER 二进制数据做 Base64 编码、再用 BEGIN 和 END 行包起来的文本格式，是存放证书和私钥最常见的方式。
- [根证书](https://ssl.sh/zh/glossary/root-certificate/): 根证书是位于证书链顶端、由 CA 自签名的证书，预装在操作系统或浏览器的信任库中，作为验证其他证书的信任锚。
