在国密Nginx中部署通配符证书,其域名匹配规则与常规SSL证书完全一致,核心原则是:通配符证书只能匹配并保护与其同级别的子域名,无法跨级匹配。
一、匹配规则详解
规则可以总结为一句话:`*.example.com` 的`*`号,只能代表一个域名标签。
✅ 可以匹配(一级子域名):证书 `*.example.com` 可以保护所有一级子域名,如 `www.example.com`、`api.example.com`、`mail.example.com` 等。
❌ 无法匹配(根域名):`*.example.com` 不能保护根域名 `example.com` 本身。如需保护根域名,必须将其作为精确域名添加到证书的“使用者备用名称”(SAN)中。
❌ 无法匹配(多级子域名):`*.example.com` 不能保护二级或更深层级的子域名,例如 `dev.api.example.com`。要保护 `dev.api.example.com`,需要单独购买一个针对 `*.api.example.com` 的通配符证书,或使用多域名证书。
二、核心配置实践
在理解了匹配规则后,正确的Nginx配置同样关键。
每个域名独立配置:Nginx推荐为每个需要HTTPS保护的域名都配置独立的 `server` 块。即使多个域名使用同一张通配符证书,也建议分别配置,以避免SNI(服务器名称指示)在握手阶段可能导致的证书分发错误。
配置示例:
nginx
server {
listen 443 ssl;
server_name www.example.com; # 独立配置
# 指向你的国密证书文件
ssl_certificate /path/to/your/domain.sm2.crt;
ssl_certificate_key /path/to/your/domain.sm2.key;
# ... 其他SSL配置 ...
}
server {
listen 443 ssl;
server_name api.example.com; # 另一个独立配置
# 指向相同的国密证书文件
ssl_certificate /path/to/your/domain.sm2.crt;
ssl_certificate_key /path/to/your/domain.sm2.key;
# ... 其他SSL配置 ...
}
配置完成后,务必使用 `nginx -t` 命令测试配置文件的正确性,然后再重载Nginx服务。
三、国密部署特别提醒
在国密环境下部署,还需注意:
使用国密Nginx版本:必须使用编译了国密模块(如`GmSSL`)的Nginx版本,或使用支持双证书的Nginx发行版。
双证书部署:为兼顾兼容性,很多场景会同时部署国际(RSA)和国密(SM2)双证书。此时,上述域名匹配规则对两种证书均适用。
证书与域名严格对应:部署的证书域名必须与实际访问的域名完全匹配,否则浏览器会提示