# 基本约束（Basic Constraints）是什么？

> 基本约束是 X.509 证书扩展，用来声明该证书是否属于 CA，以及其下方还允许出现多少层 CA。

Source: https://ssl.sh/zh/glossary/basic-constraints/
Last updated: 2026-11-10

基本约束（Basic Constraints）包含两个字段：布尔值 `cA` 和可选的 `pathLenConstraint`（路径长度约束）。`cA` 为真时，证书对应的密钥可以签发其他证书（还需配合 keyCertSign [密钥用途](https://ssl.sh/zh/glossary/key-usage/)）；路径长度则限制证书链中它下面还能出现几层中间 CA。RFC 5280 要求所有 CA 证书都必须包含该扩展并标记为关键（critical）；终端证书要么不含该扩展，要么设为 `CA:FALSE`。

## 为什么重要
正是这个标志阻止了普通网站证书冒充 CA 去签发证书。早期有 TLS 实现不检查它，导致任何持有普通证书的人都能为其他域名签发证书，此后这项检查成了 [X.509](https://ssl.sh/zh/glossary/x509/) 路径验证的标配。它也能解释一些实际报错：用 `CA:TRUE` 生成的服务器证书在 Firefox 中可能报 MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY；带 `pathlen:0` 的 [下级 CA](https://ssl.sh/zh/glossary/subordinate-ca/) 无法再签发中间证书。自建内网 CA 时，根证书和中间证书要设为 `CA:TRUE`，网站证书要设为 `CA:FALSE`。

## 例子
```text
X509v3 Basic Constraints: critical
    CA:TRUE, pathlen:0
```

这是 `openssl x509 -noout -text` 对“只能签发终端证书的 CA”的显示方式，终端证书则显示 `CA:FALSE`。

## 常见误区
- **pathlen:0 表示这个 CA 什么都不能签。** 它可以签发终端证书，只是不能再签发下一级 CA 证书。
- **自签名证书都应该是 CA。** 自签名根证书需要 `CA:TRUE`，但直接作为服务器证书使用的自签名证书不应带这个标志。

## 相关术语

- [X.509](https://ssl.sh/zh/glossary/x509/): X.509 是 ITU-T 制定的公钥证书标准格式，其互联网配置规范 RFC 5280 规定了 TLS 所用证书的结构和验证方法。
- [下级 CA](https://ssl.sh/zh/glossary/subordinate-ca/): 下级 CA 是 CA 证书由另一个 CA（通常是根 CA）签发的证书颁发机构，一般负责实际签发终端证书。
- [中间证书](https://ssl.sh/zh/glossary/intermediate-certificate/): 中间证书是由根证书（或上级中间证书）签发、用来签发网站证书的 CA 证书，服务器必须把它和网站证书一起发送给客户端。
- [根证书](https://ssl.sh/zh/glossary/root-certificate/): 根证书是位于证书链顶端、由 CA 自签名的证书，预装在操作系统或浏览器的信任库中，作为验证其他证书的信任锚。
- [名称约束](https://ssl.sh/zh/glossary/name-constraints/): 名称约束是 CA 证书中的 X.509 扩展，用来限定该 CA 之下签发的证书只能包含哪些域名、IP 段、邮箱或 DN。
- [密钥用途](https://ssl.sh/zh/glossary/key-usage/): 密钥用途是 X.509 证书扩展，限定证书公钥可执行的密码学操作，例如数字签名、密钥加密或签发证书。
