多域名 SSL 证书(也称为 SAN 或 UCC 证书)用一张证书保护多个不同的域名。无需为 example.com、example.org 和 myapp.io 分别管理证书,一张 SAN 证书即可全部覆盖。
这与通配符证书不同,通配符覆盖的是一个域名的子域名。SAN 证书可以覆盖完全不同的域名。
SAN 证书的工作原理
SAN 代表 Subject Alternative Name(主体备用名称)——X.509 证书标准中的一个字段,列出证书有效的额外域名。当浏览器连接到服务器时,它会检查请求的域名是否匹配任何 SAN 条目。
多域名证书内部看起来是这样的:
Certificate for:
CN: example.com
SAN: example.com
SAN: www.example.com
SAN: example.org
SAN: api.myapp.io
这四个域名都由一张证书和一个私钥保护。如果请求的主机名匹配任何 SAN 条目,浏览器就接受连接。
限制: Let’s Encrypt 支持每张证书最多 100 个 SAN 条目。商业 CA 各有不同——有些允许 250+,有些按条目收费。
常见使用场景
多个品牌域名
你运营 brandname.com、brandname.co.uk 和 brandname.de。一张 SAN 证书覆盖所有三个,无需为每个地区分别管理证书。
域名 + www 变体
最常见的 SAN 用途:example.com + www.example.com。大多数证书会自动包含两者。GetHTTPS 在你输入裸域名时会提示你添加 www 变体。
不同域名上的微服务
你的 API 在 api.company.com,文档在 docs.company.com,营销站点在 company.com。一张 SAN 证书保护所有三个。如果它们都是子域名,通配符可能更简单。
域名迁移
从 olddomain.com 迁移到 newdomain.com?覆盖两者的 SAN 证书让你在过渡期间为两个域名提供 HTTPS,无需维护两张独立证书。
SAN vs 通配符
| SAN(多域名) | 通配符 | |
|---|---|---|
| 覆盖范围 | 特定列出的域名 | 一个域名的所有子域名 |
| 跨域 | ✅ example.com + other.com | ❌ 仅限一个基础域名 |
| 新域名 | 需要新证书 | 新子域名自动覆盖 |
| 验证类型 | HTTP-01 或 DNS-01 | 仅 DNS-01 |
| 证书大小 | 随 SAN 条目增加而增长 | 固定 |
| 使用场景 | 多个不同域名 | 一个域名的多个子域名 |
| Let’s Encrypt 限制 | 每证书 100 个名称 | 每证书 1 个通配符(可与 SAN 组合) |
可以组合两者: 一张证书可以同时包含 example.com、*.example.com 和 other.com 作为 SAN 条目。这种做法常用于在一张证书中覆盖裸域名、所有子域名和额外域名。
通过 GetHTTPS 获取多域名证书
- 前往 gethttps.com/app/setup
- 输入所有要覆盖的域名:
example.com、www.example.com、example.org - 为每个域名完成验证 —— HTTP-01(放置文件)或 DNS-01(添加 TXT 记录)
- GetHTTPS 在提交到 Let’s Encrypt 之前会预检每个验证
- 下载一张覆盖所有域名的证书
每个域名需要单独验证,因为 Let’s Encrypt 必须独立确认你控制每一个域名。GetHTTPS 按顺序处理——你验证一个,然后验证下一个。
示例:3 个域名,混合验证方式
| 域名 | 验证类型 | 操作 |
|---|---|---|
example.com | HTTP-01 | 在服务器上放置文件 |
www.example.com | HTTP-01 | 同一服务器,相同流程 |
example.org | DNS-01 | 添加 TXT 记录(不同的 DNS 提供商) |
三个都通过后,你获得一组覆盖所有三个域名的证书文件(fullchain.pem、privkey.pem)。
安装多域名证书
安装与单域名证书完全相同。服务器不关心证书中有多少 SAN——使用相同的文件。
Nginx:
server {
listen 443 ssl http2;
server_name example.com www.example.com example.org;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
}
Apache:
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com example.org
SSLEngine on
SSLCertificateFile /etc/ssl/cert.pem
SSLCertificateKeyFile /etc/ssl/privkey.pem
SSLCertificateChainFile /etc/ssl/chain.pem
</VirtualHost>
如果域名指向不同的服务器,在每台服务器上安装相同的证书文件。证书对所有列出的域名有效,无论哪台服务器提供它。
常见问题
SAN 证书更贵吗?
使用 Let’s Encrypt 时不会。你可以通过 GetHTTPS 在一张免费证书中包含最多 100 个域名。某些商业 CA 每增加一个 SAN 条目收费 $10-50。
所有域名需要在同一台服务器上吗?
不需要。证书在任何服务器上都有效。在需要为任何列出域名提供服务的每台服务器上安装相同的 fullchain.pem 和 privkey.pem。
能向现有 SAN 证书添加域名吗?
不能直接添加——已签发的证书不能修改。你需要申请一张包含所有域名(现有 + 新的)的新证书。通过 GetHTTPS,这只需几分钟。
什么时候应该使用独立证书?
在以下情况使用独立证书:
- 不同团队管理不同域名(独立密钥 = 独立访问控制)
- 需要不同的续签计划
- 隔离很重要 —— 一个密钥的泄露不应影响其他域名
- 超过 100 个名称 —— 分散到多张证书
SAN 如何影响证书大小?
每个 SAN 条目为证书增加约 30-50 字节。100 个条目时,证书增大几 KB。对 TLS 握手速度的影响可以忽略。
SAN 和 UCC 有什么区别?
UCC(Unified Communications Certificate)是 Microsoft 对多域名 SAN 证书的称呼,最初为 Exchange 和 Office Communications Server 设计。从技术上讲它们是同一个东西——一张包含多个 SAN 条目的证书。