`SubjectAltName`(简称 SAN)是 X.509 数字证书中的一个扩展字段,它允许在单个证书中指定多个身份标识。这些身份标识可以是域名、IP 地址、电子邮件地址或其他类型的标识符。SAN 扩展使得一个 SSL/TLS 证书能够用于多个不同的主机名或服务,而不需要为每个主机名都申请单独的证书。
以下是 `SubjectAltName` 可能包含的不同类型的身份标识:
1. **DNS Name**: 指定一个或多个域名。这对于拥有多个子域或别名(如 `www.example.com` 和 `mail.example.com`)的网站特别有用。
2. **IP Address**: 指定一个或多个 IP 地址。这适用于直接通过 IP 地址访问的服务。
3. **Uniform Resource Identifier (URI)**: 指定一个 URI,可用于标识 web 服务等资源。
4. **Email Address**: 指定一个电子邮件地址,用于邮件服务器的 TLS/SSL 证书。
5. **Directory Name**: 指定一个 X.500 目录名称,通常用于客户端认证。
6. **Registered ID**: 指定一个对象标识符 (OID),这是由注册机构定义的一个唯一编号,用来表示特定的实体或应用。
7. **Other Name**: 允许使用其他类型的名称形式,通常与自定义 OID 结合使用。
### 使用场景
- **多域名支持**:一个组织可能拥有多个域名,并希望所有这些域名都能通过同一个 SSL/TLS 证书来加密通信。SAN 使这成为可能,而无需为每个域名购买单独的证书。
- **通配符证书**:虽然通配符证书(如 `*.example.com`)可以覆盖整个子域,但有时您可能还需要包括不在此通配符模式下的额外域名。在这种情况下,可以在 SAN 字段中添加这些额外的域名。
- **内部和外部域名**:对于既提供公共互联网服务又提供内部网络服务的组织来说,SAN 可以同时包含面向公众的域名和仅供内部使用的域名。
- **IP 地址绑定**:某些情况下,特别是当服务没有关联的 DNS 名称时,可以通过 SAN 中的 IP 地址来绑定 SSL/TLS 证书。
### 配置和验证
在配置 SSL/TLS 证书时,确保您的 Web 服务器或应用程序正确设置了 `SubjectAltName` 字段。如果证书中缺少这个字段或者配置错误,浏览器和客户端可能会显示警告信息或拒绝连接。因此,在生成证书签名请求 (CSR) 时,请务必仔细检查并包含所有必要的 SAN 条目。
此外,一些证书颁发机构 (CA) 提供了在线工具或指南,帮助用户创建带有正确 `SubjectAltName` 的 CSR。在部署证书后,也应验证 SAN 字段是否按照预期包含所有需要的身份标识。