在国密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)双证书。此时,上述域名匹配规则对两种证书均适用。

      证书与域名严格对应:部署的证书域名必须与实际访问的域名完全匹配,否则浏览器会提示