在Nginx服务器安装国密SSL证书(Windows)

更新时间:
复制为 MD 格式

本文介绍如何在 Windows 操作系统的 Nginx 服务器上配置国密标准 SSL 证书,包括下载证书文件、配置 Nginx 参数以及安装后的验证步骤。

重要

本文以 Windows 64 位操作系统、Nginx 1.24.0 国密版(非普通官网下载版本)和沃通 DV 国密 SSL 证书为例进行演示。不同操作系统版本和 Web 服务器的部署操作可能存在差异。

背景信息

国密SSL证书是指根据中国国家密码局制定的密码算法标准所生成的SSL证书,主要用于满足企业对HTTPS协议国产化改造及国密算法应用的合规要求。如果您的Web应用服务器仅部署了国密SSL证书,则只能在支持国密算法的浏览器中访问,如密信浏览器和红莲花浏览器。因此,为了确保与各类浏览器的兼容性,通常会采取SM2/RSA双证书部署方案。

前提条件

  • 已通过数字证书管理服务签发国密标准证书(双证书方案还需要签发国际标准证书)。具体操作,请参见购买正式证书申请证书

  • 域名已正确解析至当前服务器,且已完成工信部 ICP 备案(适用于中国内地服务器)。

    如何查看域名解析记录以及 ICP 备案信息

    打开网络拨测工具,选择网络诊断分析,输入当前域名,确认以下信息:

    • DNS 服务商解析结果中 A 记录的 IP 为当前服务器的公网 IP。

    • 备案检查网站已备案。若显示“网站未备案,请咨询网站服务器提供商”,请完成备案后再安装证书。

  • 已获得本服务器的管理权限(即“root账号”或“有 sudo 权限”的账号)。

操作步骤

步骤一:下载 SSL 证书

  1. 进入SSL证书管理页面,定位需部署的目标证书,并确认以下信息:

    1. 证书状态:确保其为已签发。若为即将过期已过期,则需续费SSL证书

    2. 绑定域名:确保其能够匹配所有需保护的域名,否则未匹配的域名访问 HTTPS 时将出现安全警告。如需添加或修改,请参见追加和更换域名

      确认证书是否匹配目标域名

      证书的绑定域名可包含多个精确域名和通配符域名。每类域名的匹配规则如下:

      • 精确域名:仅对指定域名生效。

        • example.com 仅对 example.com 生效。

        • www.example.com 仅对 www.example.com 生效。

      • 通配符域名:仅对其一级子域名生效。

        • *.example.com 对 www.example.coma.example.com 等一级子域名生效。

        • *.example.com 对根域名 example.com 和多级子域名 a.b.example.com 不生效。

      说明

      如需匹配多级子域名,绑定域名中需包含该域名(如 a.b.example.com),或包含相应的通配符域名(如 *.b.example.com)。

  2. 在目标证书的操作列,单击下载,下载服务器类型Nginx的证书。

  3. 解压下载的证书压缩包,其中包含以下文件:

    • 签名证书:<证书绑定域名>_sm2_sign.pem<证书绑定域名>_sm2_sign.key

    • 加密证书:<证书绑定域名>_sm2_enc.pem<证书绑定域名>_sm2_enc.key

      说明

      如果您在申请证书时使用 OpenSSL、Keytool 等工具生成了 CSR 文件,私钥文件仅保存在本地,下载的证书压缩包中不包含私钥。私钥一旦遗失,证书将无法使用,您需要重新购买正式证书并生成 CSR 和私钥。

步骤二:安装 Nginx 国密版

  1. 下载 Nginx Windows 国密版安装包:

    请根据服务器操作系统的位数选择对应的安装包。

  2. 解压 Nginx 国密版安装包:

    选择与服务器操作系统位数匹配的 Nginx 国密版压缩包,将其解压至指定目录,例如 C:\nginx-1.24.0

    说明

    本文以 C:\nginx-1.24.0 作为 Nginx 的安装目录演示后续操作。

步骤三:在 Windows 服务器配置 SSL 证书

  1. 登录 Windows 服务器。

  2. 开放安全组的 443 端口。

    请确保安全组已开放 443 端口 (TCP),否则外部无法访问服务。以下操作以阿里云 ECS 为例:

    1. 进入云服务器ECS实例页面,选择目标 ECS 实例所在地域,单击目标实例名称,进入实例详情页。

    2. 单击安全组 > 内网入方向全部规则,确保存在一条授权策略允许协议类型TCP目的端口范围HTTPS(443)授权对象任何位置(0.0.0.0/0)(或其它地址,确保 PC 可远程访问即可)的规则。

    3. 如不存在上述规则,请参照添加安全组规则在目标安全组中添加相应规则。

  3. 开放服务器防火墙的 443 端口。

    1. 登录Windows服务器,单击左下角开始菜单,打开控制面板

    2. 点击

    3. 如果防火墙处于如下图的关闭状态,无需额外操作。image

    4. 如果防火墙已开启,请参考以下步骤放行HTTPS规则。

      1. 单击左侧,检查是否存在协议TCP,本地端口443,操作阻止的入站规则。

      2. 若存在此类规则,需要右键单击相应规则并选择属性,在常规页签,将其修改为允许连接应用

  4. 上传证书文件到服务器,以下三种方式任选其一即可。

    Workbench上传文件

    1. 在前面步骤打开的 Workbench 页面中,单击左下角开始菜单,查找并打开名为此电脑计算机文件资源管理器的选项。

    2. 双击 xxx上的workbench

      image

    3. 从本地拖动之前步骤下载的zip文件至该目录,并右键刷新文件夹。

    4. 然后将目标文件从该目录拖动到 C 盘或者其他盘。

      重要

      重新连接、退出实例时,Workbench会自动清除该实例重定向的驱动程序和文件夹中已上传的所有文件信息以节省空间,该目录仅用于文件传输,请不要保存文件。

    远程连接工具上传文件

    在使用远程桌面连接Windows App连接实例时,可以直接将下载的证书文件复制粘贴上传至服务器,具体操作,请参见使用远程桌面或Windows APPWindows实例传输文件

    在服务器上下载证书文件

    如果您的服务器可以访问公网并登录阿里云控制台,则可以直接在服务器上登录数字证书管理服务控制台进行步骤一的下载。

  5. 进入 Nginx 安装目录,在 C:\nginx-1.24.0\conf 目录下创建 cert 目录,用于存放国密标准和国际标准 SSL 证书。

    cert 目录仅为示例,证书存放目录可以任意命名。

  6. 将国密标准证书和国际标准证书文件上传至 C:\nginx-1.24.0\conf\cert 目录。

    说明

    您可以使用远程登录工具的本地文件上传功能来上传文件。例如PuTTYXshellWinSCP等工具。如果您使用的是阿里云云服务器 ECS,关于上传文件的具体操作,请参见上传或下载文件

  7. C:\nginx-1.24.0\conf\nginx.confhttp 区块内添加 include ssl.conf; 配置,如下所示:

    http {
      ...
      include  mimi.types;
      include  ssl.conf;
      default_type  application/octet-stream;
      ...
    }
  8. 配置 ssl.conf 文件。

    1. C:\nginx-1.24.0\conf 目录下新建 ssl.conf 文件,添加以下配置。

      说明

      以下配置仅供参考,请根据实际情况修改证书路径、证书文件名和域名。

      server {
      	listen 443 ssl;
      	server_name yourdomain.com;
      	#配置国密算法签名证书-SM2证书
      	ssl_certificate 	C:/nginx-1.24.0/conf/cert/yourdomain.com_sm2_sign.pem;
      	ssl_certificate_key 	C:/nginx-1.24.0/conf/cert/yourdomain.com_sm2_sign.key;
      	#配置国密算法加密证书-SM2证书
      	ssl_certificate 	C:/nginx-1.24.0/conf/cert/yourdomain.com_sm2_enc.pem;
      	ssl_certificate_key 	C:/nginx-1.24.0/conf/cert/yourdomain.com_sm2_enc.key;
      	#(可选)配置国际标准RSA算法证书
      	ssl_certificate 	C:/nginx-1.24.0/conf/cert/yourdomain.com.pem;
      	ssl_certificate_key 	C:/nginx-1.24.0/conf/cert/yourdomain.com.key;
      	#配置SSL会话超时时间
      	ssl_session_timeout 5m;
      	ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
      	ssl_ciphers ECC-SM4-SM3:ECDH:AESGCM:HIGH:MEDIUM:!RC4:!DH:!MD5:!aNULL:!eNULL;
      	ssl_prefer_server_ciphers on;
      	location / {
      		root html;
      		index index.html index.htm;
      	}
      }
      
    2. 验证配置文件是否正确:

      打开命令提示符,进入 nginx-1.24.0 安装目录,执行 nginx -t。如果配置文件无误,将提示 nginx.conf test is successful,此时可以启动 Nginx 服务。

      如果出现错误提示,请根据提示信息排查并修复配置文件中的问题,直到验证通过。

  9. 启动 Nginx 服务。

    进入 Nginx 安装目录,找到 nginx.exe 文件并双击启动 Nginx 服务。

步骤四:验证 SSL 证书是否配置成功

  1. 请通过 HTTPS 访问您已绑定证书的域名(如 https://example.comexample.com 需替换为实际域名)。

  2. 若浏览器地址栏显示安全锁图标,说明证书已成功部署。如访问异常或未显示安全锁,请先清除浏览器缓存或使用无痕(隐私)模式重试。

    image

    Chrome 浏览器自 117 版本起,地址栏中的image已被新的image替代,需单击该图标后查看安全锁信息。

重要

国密标准 SSL 证书需要与支持国密算法的浏览器(如 360 浏览器、密信浏览器、红莲花浏览器)配合使用。这类浏览器可以识别并启用国密算法,与部署了国密 SSL 证书的服务器建立安全通信。

说明

如果仍有问题,请参考常见问题进行排查。

常见问题

安装或更新证书后,证书未生效或 HTTPS 无法访问

常见原因如下:

如何更新(替换)Nginx 中已安装的 SSL 证书

1. 备份服务器上原有的证书文件(.pem 和 .key)。

2. 登录数字证书管理服务控制台,下载新的证书文件(.pem 和 .key)。

3. 将新证书文件上传到目标服务器,覆盖原有文件(确保路径和文件名一致)。

4. 重载(reload)Nginx 服务,使新证书生效。

如何在 Nginx 中关闭 TLSv1.0 和 TLSv1.1 以避免部分浏览器提示"证书不符合标准"

在 Nginx 监听 443 端口的 server 块中,将 ssl_protocols 配置为仅保留 TLSv1.2 和 TLSv1.3,即 ssl_protocols TLSv1.2 TLSv1.3;。此配置将禁用不安全的 TLSv1.0 和 TLSv1.1。配置完成后,执行 .\nginx.exe -s reload 使设置生效。