通配证书与 SAN 是什么
X.509 证书用一个叫 subjectAltName(缩写 SAN)的扩展列出它能代表的所有主机名,一张证书因此可以覆盖多个域名。若某条写成 *.example.com,就是通配符,只匹配同一级下的子域;把多个不同主机名并列写进 SAN,就是多域名证书(历史上也叫 UCC 统一通信证书)。现代浏览器与客户端只看 SAN 来匹配主机名,已不再参考 CN 字段,所以签发时必须把域名写进 SAN。
基本信息
| 规范 | RFC 6125 §6.4.3(通配符匹配)、CA/Browser Forum BR §3.2.2 |
|---|---|
| 查看命令 | openssl x509 -noout -ext subjectAltName |
| 通配范围 | *.example.com 匹配 a.example.com,不匹配 a.b.example.com,也不含裸域 example.com |
| 多域名 | SAN 中并列多个 DNS 名,浏览器一并认可 |
| 条目上限 | 单个 SAN 的域名数量有 CA 侧限制,常见为 100 个左右 |
| 透明日志 | 公开 CA 签发的证书进入 CT 日志,可被第三方检索 |
典型使用场景
- 同一主域下子域极多的 SaaS 或托管平台,用一张通配证书少做续期运维
- 负载均衡或网关统一卸载 TLS,后端按 Host 头分发请求
- 站点同时提供裸域与 www,SAN 里把 example.com 与 www.example.com 都写上
- 多品牌或集团站群共用一套入口,用多域名证书覆盖不同主域
- 内网 mTLS 用私有 CA 为固定几台主机签发 SAN 明确的证书
查看与签发自检
查看与签发自检
# 查看本地证书里的 SAN
openssl x509 -in cert.pem -noout -ext subjectAltName
# 查看线上站点实际提供的证书 SAN(注意 -servername 必填,否则拿到默认虚拟主机证书)
echo | openssl s_client -servername www.example.com -connect www.example.com:443 2>/dev/null \
| openssl x509 -noout -ext subjectAltName
# 生成 CSR 时直接写入 SAN 扩展
openssl req -new -key key.pem -addext "subjectAltName=DNS:example.com,DNS:*.example.com" -out csr.pem通配与多域名对照
| 项目 | 规则 | 说明 |
|---|---|---|
| 通配层级 | 只匹配一级 | *.example.com 不匹配 a.b.example.com |
| 裸域 | 需单独列出 | *.example.com 不包含 example.com |
| 多域名 | SAN 中并列 | 可跨主域,如 example.com 与 example.org |
| 大小写 | 不区分 | 主机名匹配时不区分大小写 |
| 端口与路径 | 不参与 | 证书只绑定主机名,不含端口与 URL 路径 |
证书只校验主机名这一个维度:把端口或路径写进域名没有意义,443 与非标准 HTTPS 端口只要主机名相同,用同一张证书即可通过校验。
通配证书把信任边界放大到整个一级子域:任何子域的密钥管理权或 DNS 权限丢失,都可能被用来伪造同域登录页。面向高价值账户的系统,建议按具体主机名单独签发,缩小影响面。