# SAN是什么？定义、例子与常见误区

> SAN 即主体备用名称，是 X.509 证书中列出其适用的所有域名、IP 地址等身份的扩展，客户端按它校验主机名。

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

SAN（Subject Alternative Name，主体备用名称）扩展在 RFC 5280 中定义，内容是一组带类型的名称：`dNSName` 表示域名，`iPAddress` 表示 IPv4/IPv6 地址，`rfc822Name` 表示邮箱地址（S/MIME 使用），`uniformResourceIdentifier` 表示 URI。TLS 客户端把连接时使用的主机名与其中的 DNS 或 IP 条目比对，已不再参考 [CN](https://ssl.sh/zh/glossary/common-name/)。一张证书可以包含很多个 SAN 条目，这正是 [多域名证书](https://ssl.sh/zh/glossary/multi-domain-certificate/) 的实现基础。

## 为什么重要
名字不在 SAN 里，证书对它就无效。[通配符](https://ssl.sh/zh/glossary/wildcard-certificate/) 条目如 `*.example.com` 只匹配一级子域名：能匹配 `www.example.com`，但不匹配 `example.com`，也不匹配 `a.b.example.com`。所以多数证书会同时写上 `example.com` 和 `www.example.com`（或 `*.example.com`）。每个 SAN 条目都要经过 CA 验证，签发后列表就固定了，想增加域名只能重新签发。国内云厂商控制台里的“绑定域名”“多域名”选项，最终对应的都是 SAN 条目。

## 例子
生成私钥和带两个 SAN 条目的 CSR：

```bash
openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr \
  -subj "/CN=example.com" \
  -addext "subjectAltName=DNS:example.com,DNS:www.example.com"
```

`-addext` 参数需要 OpenSSL 1.1.1 及以上版本。

## 常见误区
- **`*.example.com` 也覆盖 `example.com`。** 不覆盖，主域名需要单独写一个条目。
- **可以往现有证书里追加 SAN。** 任何改动都会让 CA 的签名失效，只能重新申请证书。
- **“SAN 证书”是一种特殊产品。** 几乎所有 TLS 证书都有 SAN 扩展，这个营销说法只是指包含多个域名的证书。

## 相关术语

- [CN](https://ssl.sh/zh/glossary/common-name/): CN 即通用名称，是证书主体中曾用来填写域名的属性；现代浏览器已忽略它，只按 SAN 扩展匹配域名。
- [多域名证书](https://ssl.sh/zh/glossary/multi-domain-certificate/): 多域名证书是在 SAN 扩展中列出多个不同主机名、让一张证书同时保护多个域名的 TLS 证书。
- [通配符证书](https://ssl.sh/zh/glossary/wildcard-certificate/): 通配符证书是名称以星号开头（如 *.example.com）、可匹配该域名下任意一级子域名的 TLS 证书。
- [X.509](https://ssl.sh/zh/glossary/x509/): X.509 是 ITU-T 制定的公钥证书标准格式，其互联网配置规范 RFC 5280 规定了 TLS 所用证书的结构和验证方法。
- [IP 证书](https://ssl.sh/zh/glossary/ip-address-certificate/): IP 证书是在 SAN 中写入 IP 地址的 TLS 证书，使客户端在直接通过 IP 访问服务器时也能验证其身份。
- [CSR](https://ssl.sh/zh/glossary/csr/): CSR 是证书签名请求，包含申请者的公钥和希望写入证书的身份信息，用私钥签名后提交给 CA 以申请证书。
