在部署支持国密算法的SSL证书时,为了确保与各类浏览器的兼容性,通常会采用SM2/RSA双证书部署方案,即您需要在服务器同时配置国际通用的RSA算法证书和国密标准的SM2算法证书。本文为您介绍如何使用Tengine+Tongsuo组合方式,实现Tengine服务器双算法证书部署。
Tengine是一款开源、高性能、可扩展的Web服务器和反向代理服务器,它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。更多关于Tengine的说明,请参见Tengine官网。
Tengine已对铜锁/Tongsuo(原名BabaSSL)进行适配,并增加了对NTLS(National TLS,也称国密TLS)相关能力的支持。对于有使用国密算法进行安全通信协议需求的用户,可以直接使用Tengine+Tongsuo的组合。
已通过数字证书管理服务控制台签发RSA算法和SM2算法两张证书。具体操作,请参见购买SSL证书和提交证书申请。
本文以Wosign品牌的DV证书为例介绍,您可以根据实际需要选择购买其他品牌的证书。如需了解不同品牌证书支持的加密算法,请参见根据证书加密算法选择证书。
登录数字证书管理服务控制台。
在左侧导航栏,选择。
在SSL 证书页面,定位到目标证书,在操作列,单击下载。
在服务器类型为Nginx的操作列,单击下载。
解压缩已下载的SSL证书压缩包。
根据您在提交证书申请时选择的CSR生成方式,解压缩获得的文件不同,具体如下表所示。
CSR生成方式 |
证书压缩包包含的文件 |
系统生成或选择已有的CSR |
|
手动填写 |
|
在服务器执行以下命令安装需要使用的软件命令包。
yum -y install wget yum -y install gcc gcc-c++ yum -y install make yum -y install pcre pcre-devel yum -y install gzip yum -y install zlib-devel
在服务器上执行以下命令,下载Tongsuo和Tengine。
下载Tongsuo 8.2.1并解压。
wget -c https://github.com/BabaSSL/BabaSSL/archive/refs/tags/8.2.1.tar.gz tar -zxvf Tongsuo-8.2.1.tar.gz #解压BabaSSL压缩包
下载Tengine 2.4.1并解压。
wget -c https://tengine.taobao.org/download/tengine-2.4.1.tar.gz tar -zxvf tengine-2.4.1.tar.gz
在Tengine解压目录下,执行以下命令,编译安装Tengine并关联Tongsuo。
复制命令后,请参考下述说明修改对应的目录:
--prefix=/usr/local/tengine:指定Tengine安装目录为/usr/local/tengine,您可以指定其他目录。
--add-module=modules/ngx_tongsuo_ntls:加载Tongsuo NTLS。Tengine 2.4.1之前的版本需将ngx_tongsuo_ntls替换为ngx_openssl_ntls。
--with-openssl=../Tongsuo-8.2.1:OpenSSL替换为Tongsuo以实现SM2。../Tongsuo-8.2.1需替换为实际Tongsuo安装路径。
./configure --prefix=/usr/local/tengine \ --add-module=modules/ngx_tongsuo_ntls \ --with-openssl=../Tongsuo-8.2.1 \ --with-openssl-opt="enable-ntls" \ --with-http_ssl_module \ --with-stream \ --with-stream_ssl_module \ --with-stream_sni make -j make install
执行以下命令在Tengine服务器配置文件目录中创建证书存放目录。
cd /usr/local/tengine/conf #步骤二中指定的Tengine安装目录,请您可以根据实际配置调整。 mkdir cert #创建证书目录,命名为cert。
将证书相关文件上传到cert目录(示例中为/usr/local/tengine/conf/cert)。
编辑Tengine配置文件nginx.conf(示例中文件位于/usr/local/tengine/conf),修改与证书相关的配置。配置内容如下:
server { listen 443 ssl; server_name aliyundoc.com; #需修改为对应的网站域名 # 启用NTLS。Tengine针对BabaSSL中的NTLS功能进行了适配,本文使用BabaSSL作为Tengine的底层密码库来实现通信加密的能力。 enable_ntls on; # 配置国密算法签名证书 ssl_sign_certificate cert/server_sign.pem; #需修改为实际证书文件路径 ssl_sign_certificate_key cert/server_sign.key; #需修改为实际私钥文件路径 # 配置国密算法加密证书 ssl_enc_certificate cert/server_enc.pem; #需修改为实际证书文件路径 ssl_enc_certificate_key cert/server_enc.key; #需修改为实际私钥文件路径 # 配置RSA算法证书 ssl_certificate cert/server_rsa.pem; #需修改为实际证书文件路径 ssl_certificate_key cert/server_rsa.key; #需修改为实际私钥文件路径 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; # 配置加密套件# ssl_ciphers HIGH: !aNULL: !MD5; ssl_ciphers ECC-SM2-SM4-CBC-SM3:ECC-SM2-SM4-GCM-SM3:ECDHE-SM2-SM4-CBC-SM3:ECDHE-SM2-SM4-GCM-SM3:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!RC4:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }
执行如下命令,重启Tengine服务。
cd /usr/local/tengine/sbin #进入Tengine服务的可执行目录。 ./nginx -s reload #重新载入配置文件。
证书安装完成后,您可通过访问证书的绑定域名验证该证书是否安装成功。
https://yourdomain #需要将yourdomain替换成证书绑定的域名。
国密算法证书验证需要使用国密浏览器(例如密信浏览器)测试。
RSA算法证书使用Google、Firefox、Edge等浏览器测试。
通过浏览器访问网站时,服务器会根据浏览器对国密算法的支持情况自动切换使用相应的加密方式:
如果浏览器支持国密算法,则服务器会选择国密SM2算法证书进行HTTPS加密通信。
若使用的浏览器不支持国密算法(如大多数国际主流浏览器),则服务器将使用RSA算法证书进行HTTPS加密通信。