在Nginx服务器安装RSA和SM2双算法证书

本文将阐述Linux CentOS环境下如何在Nginx服务器上配置Wosign品牌的国密标准SSL数字证书,具体包括证书文件的下载与上传、在Nginx上配置证书文件参数,以及安装证书后的结果验证。成功配置国密标准SSL证书后,您将能够通过HTTPS安全地访问Nginx服务器

重要

本文以Linux CentOS操作系统、Nginx 1.18.0、Wosign DV国密SSL证书为例。不同版本的操作系统和Web服务器,部署操作可能有所差异,如有问题,请联系产品技术专家进行咨询,详情请参见专家一对一服务

背景信息

国密SSL证书采用国家自主知识产权的加密算法,自主可控性强,能有效抵御国外密码分析技术的攻击,保障数据传输的安全性。它符合国家政策要求,能确保业务的合规性。使用国密标准SSL数字证书是保障信息安全、满足合规要求、提升用户体验的重要选择。如果您的Web应用服务器仅部署了国密SSL证书,则只能在支持国密算法的浏览器中访问,如密信浏览器和红莲花浏览器。因此,为了确保与各类浏览器的兼容性,通常会采取SM2/RSA双证书部署方案。

说明

对于已安装的Nginx,需要卸载后重新安装。由于官方版Nginx+OpenSSL不支持国密算法,因此如果要适配国密算法,需要重新编译Nginx,并指定Wosign厂商的国密SM2模块(wotrus_ssl)。

前提条件

  • 已通过数字证书管理服务控制台签发的RSA算法的SSL证书和Wosign品牌的国密SM2证书。具体操作,请参见购买SSL证书(额度)提交证书申请

  • SSL证书绑定的域名已完成DNS解析。您可以通过DNS验证证书工具,检测域名DNS解析是否生效。具体操作,请参见DNS生效验证

  • 如果您的证书绑定域名在中国内地,需确保已完成ICP备案。更多信息,请参见什么是ICP备案

  • 已在Web服务器开放443端口。

步骤一:下载SSL证书

  1. 登录数字证书管理服务控制台

  2. 在左侧导航栏,选择证书管理 > SSL证书管理

  3. SSL证书管理页面,定位到目标证书,在操作列,单击更多,然后选择下载页签。

  4. 服务器类型Nginx操作列,单击下载

    image..png

  5. 解压缩已下载的SSL证书压缩包。

    根据您在提交证书申请时选择的CSR生成方式,解压缩获得的文件不同,具体如下表所示。CSR

    CSR生成方式

    证书压缩包包含的文件

    系统生成选择已有的CSR

    • RSA加密算法证书:<证书ID_证书绑定域名>.pem和<证书ID_证书绑定域名>.key

    • SM2加密算法证书:

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

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

    手动填写

    • 如果您填写的是通过数字证书管理服务控制台创建的CSR,下载后包含的证书文件与系统生成的一致。

    • 如果您填写的不是通过数字证书管理服务控制台创建的CSR,下载后只包括证书文件(PEM格式),不包含证书密码或私钥文件。您可以通过证书工具,将证书文件和您持有的证书密码或私钥文件转换成所需格式。转换证书格式的具体操作,请参见证书格式转换

步骤二:安装Nginx服务和Wosign(沃通)国密SM2模块

  1. 安装Nginx依赖:

    yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
  2. 下载Nginx安装包并解压:

    wget https://nginx.org/download/nginx-1.18.0.tar.gz
    #解压下载完成后的安装包
    tar -zxvf nginx-1.18.0.tar.gz
  3. 下载国密SM2模块并解压:

    wget https://www.wotrus.com/download/wotrus_ssl.tar.gz   
    #解压
    tar -zxvf wotrus_ssl.tar.gz
  4. 安装Nginx,执行以下命令:

    #进入nginx-1.18.0目录配置(wotrus_ssl2.0 根据模块解压后文件夹名称配置)
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-stream --with-http_ssl_module --with-stream_ssl_module --with-openssl=/usr/local/wotrus_ssl2.0 
    #编译安装
    make && make install

    如果编译执行过程出现报错:make[1]: *** [/usr/local/wotrus_ssl2.0/.openssl/include/openssl/ssl.h] Error 127,需要修改/usr/local/nginx1.18.0/auto/lib/openssl 目录下的 conf 文件。修改内容如下:

    CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
    CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
    CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
    CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"

    替换为:

    CORE_INCS="$CORE_INCS $OPENSSL/include"
    CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
    CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
    CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"
  5. 进入Nginx安装目录,启动Nginx

    cd /usr/local/nginx/sbin
    #启动nginx
    ./nginx
  6. 网络请求测试Nginx是否正常:

    #yourdomain替换为您的域名或者IP地址
    curl yourdomain

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

  1. 进入Nginx服务安装目录,执行以下命令:

    #在Nginx的配置文件目录下,创建一个用于存放国密标准的SSL数字证书的cert目录。cert目录仅为示例,证书存放目录没有命名限制。
    mkdir /usr/local/nginx/conf/cert       
    #在Nginx的配置文件目录下,创建一个用于存放国际标准的SSL数字证书的cn目录。cn目录仅为示例,证书存放目录没有命名限制。
    mkdir /usr/local/nginx/conf/cert/cn
  2. 将证书文件上传至对应目录。

    说明

    您可以使用远程登录工具附带的本地文件上传功能,上传文件。例如PuTTy、XshellWinSCP等。如果您使用的阿里云云服务器 ECS,上传文件具体操作,请参见上传或下载文件(Windows)上传文件到Linux云服务器

    示例:

    image

    image

  3. 修改Nginx配置文件

    1. 配置SSL证书,在/usr/local/nginx/conf目录下,修改nginx.conf 配置文件,添加以下配置。

      server {
      	listen 443 ssl;
      	server_name apache.yourdomain.com;
      	#配置国密证书
      	ssl_certificate /usr/local/nginx/conf/cert/apache.yourdomain.com_sm2_sign.pem;
      	ssl_certificate_key /usr/local/nginx/conf/cert/apache.yourdomain.com_sm2_sign.key;
      	ssl_certificate /usr/local/nginx/conf/cert/apache.yourdomain.com_sm2_enc.pem;
      	ssl_certificate_key /usr/local/nginx/conf/cert/apache.yourdomain.com_sm2_enc.key;
      	#配置国际证书
      	ssl_certificate /usr/local/nginx/conf/cert/cn/apache.yourdomain.com.pem;
      	ssl_certificate_key /usr/local/nginx/conf/cert/cn/apache.yourdomain.com.key;
      	#设置ssl 的会话超时时间为 5 分钟
      	ssl_session_timeout 5m;
      	ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
      	#配置ssl证书所需的加密套件
      	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. 验证配置文件是否正确:/usr/local/nginx/sbin/nginx -t。若配置文件无误,则提示:nginx.conf test is successful,可以启动Nginx服务,如下图:

      image

    3. 如出现错误提示,请根据提示进行错误排查,并重新修改配置文件中存在的问题,直至显示正常,然后启动Nginx服务。

    4. 重启Nginx服务。

      执行以下操作重启Nginx,使配置生效。

      #重启Nginx服务:
      /usr/local/nginx/sbin/nginx -s reload

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

打开浏览器,地址栏中输入“https://xxx”并访问。如果网页地址栏出现安全锁标志,则表示证书已成功安装。

重要

国密标准SSL数字证书需与支持国密算法的浏览器(如360、密信、红莲花浏览器)配合使用,以确保通信安全。这类浏览器能识别并启用国密算法,与部署国密标准SSL证书的服务器实现安全通信。

国际证书谷歌浏览器显示如下图所示:

image

国密证书密信浏览器显示如下图所示:

image