基于Tongsuo和tengine国密HTTPS实现

1,259 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

随着国家对加密重视,一些敏感机构都被要求国产国密化。现在开源的国密https方案主要是基于gmssl或者tassl的方案。淘宝团队也在自家开源的openssl上实现了国密算法,还结合自家的tengine(基于nginx二开)实现了国密HTTPS。该方案不同于tassl,适配于标准的nginx,而是通过ngx_openssl_ntls模块实现。

tongsuo编译

./config --prefix=/usr/local/tongsuo enable-ntls

make -j
make install

最重要的就是要加上enable-ntls来支持NTLS。

Tengine编译

./configure --prefix=/usr/local/tengine \
--add-module=modules/ngx_openssl_ntls \
--with-openssl=/root/work/Tongsuo-8.3.1 \
--with-openssl-opt="--strict -warnings enable-ntls" \
--with-http_ssl_module \
--with-stream \
--with-stream_ssl_module \ 
--with-stream_sni \

make -j
make install

这里比较特别的一点是--with-openssl引用的并非是编译好的Tongsuo路径,而是源码。这里会将tongsuo的NTLS相关代码编入相关模块。

tengine配置

密钥生成

这里直接使用官方的mkcert.sh,替换一下自己的tongsuo路径即可。

配置

server {  
       listen       443 ssl;  
       server_name  localhost;  
       enable_ntls  on;  
       ssl_sign_certificate        /usr/local/tongsuo/ssl/certs/server_sign.crt;  
       ssl_sign_certificate_key    /usr/local/tongsuo/ssl/certs/server_sign.key;  
       ssl_enc_certificate         /usr/local/tongsuo/ssl/certs/server_enc.crt;  
       ssl_enc_certificate_key     /usr/local/tongsuo/ssl/certs/server_enc.key;  
       location / {  
           root   html;  
           index  index.html index.htm;  
       }  
   }

nginx运行即可

参考资料

github.com/alibaba/ten…

github.com/Tongsuo-Pro…

www.tongsuo.net/2022/01/11/…