Nginx支持国密(使用Angie和Tongsuo)
摘要
- 使用angie(nginx的衍生版)
- 使用Tongsuo
- 使用GMCert证书
- 奇安信浏览器验证
选择的详细的原因在后文详述。
编译
# 注:这里只写了必备的模块。其余模块请视需求自行增加。
# 重点是 ntls 相关,支持国密
./configure --with-openssl=../Tongsuo-8.3.0 \
--with-openssl-opt=enable-ntls \
--with-ntls \
--with-http_ssl_module
make
# 最终编译成果为objs/angie,拷贝出去就行,没必要make install
配置
server {
listen 443 ssl;
server_name 0.0.0.0;
# Tongsuo的话,必须使用ssl_ntls。网上某些文章说的enable_ntls是不对的。(也可能是旧版的配置)
ssl_ntls on;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
# 必须有这几个
ssl_ciphers "ECC-SM2-SM4-CBC-SM3:ECDHE-SM2-WITH-SM4-SM3";
ssl_prefer_server_ciphers on;
ssl_certificate aaa-sign.cert.pem aaa-crypto.cert.pem;
ssl_certificate_key aaa-sign.key.pem aaa-crypto.key.pem;
......
}
【说明】
- 需要两个证书:签名证书、加密证书。签名加密二合一的至少我试了没成功。
- 如有必要,可以和RSA的并用(即同时支持普通浏览器和国密浏览器)
证书
来自GMCert.org。免费的。随便填个名字就可以下载临时版本(365天)
路上的坑
奇安信浏览器
奇安信浏览器必须打开“启用国密SSL通信”这个开关,否则不会使用GM。默认情况下这个开关是关闭的,并且只有专业版本才有。测试情况下,下一个最新版试用即可。
开关在选项→高级设置→国密SSL通信这个地方

密信浏览器
说是支持,实则不支持GM(或者是我没找到开关)。浪费了挺多时间。
相关连接
Angie https://en.angie.software(文档有中文选项)
Tongsuo https://www.tongsuo.net
GMCert https://gmcert.org/
https://www.ihuandu.com/help/zsk/836.html
https://www.tongsuo.net/docs/features/angie
附录
Angie
Nginx为了支持国密,必须修改代码,后续要自行维护这个修改也是相当的代价。而Angie作为一个Nginx的分支,默认已经集成了国密的功能,可以直接拿来用。
配置方面也完全兼容,不需要额外的修改。
关于:Angie是一个nginx的衍生版本(或者分叉版本)。Nginx被卖给美国公司F5以后,原Nginx的一批人建立了这个分支,继续开发和维护开源版本。
我们是一家俄罗斯IT公司,从事软件开发工作。 我们公司由前NGINX员工创立,开发了Angie—— 一个高性能且可扩展的Web服务器,它是nginx的一个分支, 旨在超越原版的功能,成为集群软件解决方案市场中备受青睐的 Web服务器。
Tongsuo
铜锁/Tongsuo 是一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中的隐私和安全提供保护能力。
PS: 其实最初首选是gmssl,但gmssl要钱,所以除非客户指定并且愿意出钱那就没必要。
GMSSL软件/工具/服务对于学习、研究、测试和教育用途永久免费。
GMSSL软件/工具/服务不得用于任何商业用途。如需以下商业版本或者OEM合作,请“联系GMSSL”。

浙公网安备 33010602011771号