在阿里系服务器(包括  ECS)上部署国密  SSL,推荐使用  Tengine  +  Tongsuo(铜锁密码库)  的组合,并采用  SM2/RSA  双证书  方案,以实现国密浏览器与普通浏览器的全面兼容。

以下是在阿里云服务器上配置  Tengine  国密双证书的详细步骤:

1.  环境准备

在开始前,请确保已经具备以下条件:

-  已在阿里云SSL证书服务控制台签发SM2国密标准证书和RSA国际标准证书。

-  域名已正确解析到服务器  IP,且已完成  ICP  备案(仅限中国内地)。

-  服务器防火墙/安全组已开放  TCP  443  端口。

2.  编译安装  Tongsuo  与  Tengine

由于官方版本软件默认不支持国密,需要从源码编译Tengine,并链接Tongsuo密码库。

1.    安装编译依赖

        bash

        #  CentOS  /  Alibaba  Cloud  Linux  /  麒麟  /  RedHat

        yum  install  -y  wget  gcc  gcc-c++  make  pcre  pcre-devel  gzip  zlib-devel

        #  Ubuntu  /  Debian

        apt  update  &&  apt  install  -y  wget  gcc  g++  make  libpcre3  libpcre3-dev  zlib1g  zlib1g-dev  openssl  libssl-dev

2.    下载  Tongsuo  与  Tengine  源码

        bash

        cd  /usr/local/src

        #  下载  Tongsuo  (版本  ≥8.4.0)

        wget  -c  https://github.com/Tongsuo-Project/Tongsuo/archive/refs/tags/8.4.0.tar.gz  -O  Tongsuo-8.4.0.tar.gz

        tar  zxf  Tongsuo-8.4.0.tar.gz

          #  下载  Tengine  (建议  3.1.0  或更高版本)

        wget  -c  https://github.com/alibaba/tengine/archive/refs/tags/3.1.0.tar.gz  -O  tengine-3.1.0.tar.gz

        tar  zxf  tengine-3.1.0.tar.gz

  3.    配置并编译  Tengine

        进入  Tengine  源码目录执行以下编译配置。关键步骤是:通过  `--with-openssl`  指定  Tongsuo  路径,并添加  `ngx_tongsuo_ntls`  国密模块。

        bash

        cd  /usr/local/src/tengine-3.1.0

        ./configure  --prefix=/usr/local/tengine  \

                --with-openssl=/usr/local/src/Tongsuo-8.4.0  \

                --with-openssl-opt="enable-ntls"  \

                --with-http_ssl_module  \

                --with-http_v2_module  \

                --add-module=modules/ngx_tongsuo_ntls

        配置完成后,执行编译与安装:

        bash

        make  -j  &&  make  install

        说明:`enable-ntls`  选项用于开启对国密协议(NTLS)的底层支持;`ngx_tongsuo_ntls`  模块为Tengine加载国密功能(旧版本Tengine中此模块名为  `ngx_openssl_ntls`)。

3.  准备证书文件

在  Tengine  安装目录(如  `/usr/local/tengine/conf/`)下创建一个  `cert`  目录,并将证书文件放入其中。

RSA证书:包含  `.pem`  (证书内容)  和  `.key`  (私钥)  文件。

SM2双证书:国密标准分为签名证书和加密证书,需要分别配置。

          签名证书:`yourdomain_sm2_sign.pem`  和  `yourdomain_sm2_sign.key`

          加密证书:`yourdomain_sm2_enc.pem`  和  `yourdomain_sm2_enc.key`

4.  配置  Tengine  开启国密  HTTPS

编辑  Tengine  的配置文件:

bash

vim  /usr/local/tengine/conf/nginx.conf

在  `http`  块内的  `server`  块中添加以下配置。该配置同时设置了  RSA  和  SM2  证书,Tengine  会根据客户端类型自动选择使用哪种算法进行握手。

nginx

server  {

        listen  443  ssl;

        server_name  www.yourdomain.com;      #  替换为实际域名

        #  -------------------  RSA  国际证书配置  -------------------

        ssl_certificate          cert/your_rsa_cert.pem;

        ssl_certificate_key  cert/your_rsa_cert.key;

        ssl_protocols  TLSv1.2  TLSv1.3;

        #  -------------------  SM2  国密双证书配置  -------------------

        ssl_sign_certificate          cert/yourdomain_sm2_sign.pem;

        ssl_sign_certificate_key  cert/yourdomain_sm2_sign.key;

        ssl_enc_certificate            cert/yourdomain_sm2_enc.pem;

        ssl_enc_certificate_key    cert/yourdomain_sm2_enc.key;

                #  指定国密协议版本和加密套件

        ssl_protocols  TLSv1.2  TLSv1.3  NTLSv1.1;

        ssl_ciphers  'ECC-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:HIGH:!aNULL:!MD5';

        #  其他常规配置

        location  /  {

                root      html;

                index    index.html  index.htm;

        }

}

5.  启动  Tengine  并验证

1.    启动服务

        bash

        /usr/local/tengine/sbin/nginx  -t                #  检查配置文件语法

        /usr/local/tengine/sbin/nginx                      #  启动

  2.    验证国密效果

        国密浏览器(如  360  浏览器、奇安信浏览器):访问网站时,浏览器地址栏会显示安全锁,并提示正在使用国密  NTLSv1.1  协议。

        普通浏览器(Chrome、Firefox等):可以正常访问,使用  RSA  证书加密,无需额外配置。

如果访问时遇到国密无法使用的问题,可以检查配置文件中是否误开启了  `ssl_reject_handshake  on;`,将其删除或设为  `off`  即可。