必须替换底层openssl为国密增强版(如tongsuo、gmssl等),并在nginx编译时显式指定--with-openssl路径及头文件/库路径,否则仍链接系统openssl,无法识别sm2/sm3/sm4算法及国密套件。

要让 Nginx 在安装阶段就支持国密算法(SM2/SM3/SM4)及对应加密套件,关键不是后期配置,而是编译时正确链接国密版密码库,并启用相关构建选项。标准 Nginx 官方版本完全不识别国密算法,必须替换底层 OpenSSL 为国密增强版。
选择并部署国密密码库
必须使用以下任一成熟国密分支,不能用原生 OpenSSL:
- Tongsuo(推荐):蚂蚁开源,TLS 1.3 国密支持稳定,社区活跃,适配性好
- GMSSL:较早成熟的国密 OpenSSL 分支,文档丰富,适合政务类项目
- openHiTLS:华为系主导,轻量、模块化强,适合嵌入式或定制化场景
- OpenSSL-gm(中科院数据所维护):学术背景强,需自行验证生产稳定性
以 Tongsuo 为例,下载源码后编译安装到指定路径(如 /usr/local/tongsuo),再确认其支持国密:
编译 Nginx 时指定国密依赖
进入 Nginx 源码目录(建议 Nginx 1.20+ 或 Angie),执行 configure 时必须显式绑定国密库路径:
./configure \--with-http_ssl_module \
--with-openssl=/usr/local/tongsuo \
--with-cc-opt="-I/usr/local/tongsuo/include" \
--with-ld-opt="-L/usr/local/tongsuo/lib -lssl -lcrypto"
注意:不能省略 --with-openssl 路径,否则仍会链接系统 OpenSSL;若使用 GMSSL,路径同理替换为 /usr/local/gmssl。
特殊场景:启用 TLCP 协议支持
如需兼容严格国密合规设备(如部分金融终端、政务网关),TLCP 是必需协议。此时需额外启用 NTLS 支持:
- 使用 Angie(Nginx 衍生版)更稳妥,其原生支持
ssl_ntls on - configure 命令中加入:
--with-ntls --with-openssl-opt=enable-ntls - Nginx 配置中必须写
ssl_ntls on;,仅靠ssl_protocols TLSv1.1+不足以激活 TLCP
验证编译结果是否生效
安装完成后,运行以下命令确认国密能力已集成进 Nginx:
nginx -V 2>&1 | grep -i "openssl\|tongsuo\|gmssl"输出应显示你指定的国密库路径;再检查其调用的 openssl 是否能列出国密套件:
/usr/local/tongsuo/bin/openssl ciphers -s -v | grep -i "sm2\|sm4\|sm3"若能看到类似 ECDHE-SM4-SM3、TLS_SM4_SM3 的条目,说明加密套件已就绪,可进入后续证书与 server 块配置阶段。











