在阿里系服务器(包括 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` 即可。