Tengine + BabaSSL ,让国密更易用!

本文涉及的产品
数据安全中心,免费版
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: BabaSSL 作为一个开源的密码库,其核心目标之一就是为用户提供合规的技术能力,使得用户在符合要求的情况下可以更加便捷的将国家核定的技术标准应用起来。

文|杨洋(花名:凯申 )

蚂蚁集团高级技术专家

负责密码学工程能力建设、BabaSSL 开源社区建设

本文 2366 字 阅读 5 分钟

近日,国内著名 Web 服务器和反向代理开源软件 TengineBabaSSL 完成了对 BabaSSL的适配工作。

Tengine 对 BabaSSL 提供的特殊 API 进行了适配,并增加对 NTLS 相关能力的支持。

「详细 Pull Request 请见」:https://github.com/alibaba/tengine/pull/1595

至此,对我国密码行业相关安全通信协议,有使用需求的用户可以直接使用 Tengine + BabaSSL 的组合。而无需额外的 patch 或者代码改动,从用户使用的角度进一步提升了便利性。

PART. 1 NTLS

目前,我国密码行业中有两个主要的通信协议相关的技术标准。一个是由信安标委于 2020 年发布的 TLCP 协议,即传输层密码协议;另外一个则是由密标委在 2012 年发布的 GM/T 0024《SSL VPN 技术规范》(以下简称 0024)。

TLCP 和 0024 的具体内容差别不大,均是从 TLS 协议发展而来,他们的主要特点是将商用密码算法 SM2、SM3 和 SM4 应用到了 TLS 协议中,并使用 SM2 密钥交换机制替换掉了 TLS 协议原有的密钥交换流程。

TLCP 和 0024 另外一个显著的特点将 TLS 协议中使用的数字证书拆分成了加密和签名两种用途的证书,加密证书和签名证书以及对应私钥均需要进行配置使用,所以 TLCP 和 0024 也俗称“国密双证书”协议。

BabaSSL 对上述国密双证书协议进行了支持,并统称为 NTLS。

NTLS 的全名为 National TLS,即我国核准的传输层安全协议,所以也可以叫做国密 TLS。

由此可见,NTLS 并不是指某一种具体的符合商用密码相关技术标准要求的网络协议,而是多个协议的统称。在 BabaSSL 中代指 TLCP 和 0024 国密双证书协议,因为 NTLS 和标准 TLS 协议存在工作方式的不同,因此 BabaSSL 中增加了一些新的 API 来对其进行支持。而应用程序若想使用 NTLS 功能,就需要调用这些新增 API,给现有基于 OpenSSL API 进行适配的应用程序带来了额外的开发工作量。

PART. 2 Tengine + BabaSSL

Tengine 是由淘宝网发起的 Web 服务器项目,它在 Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。

Tengine 的性能和稳定性已经在大型的网站(如淘宝网,天猫商城等)得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的 Web 平台。

Tengine 作为国内知名的开源 Web 服务器软件,在各领域均得到了广泛的使用且享有很高的知名度。

BabaSSL 是一款轻巧、灵活且靠谱的密码学和 TLS 协议工具集。BabaSSL 是蚂蚁集团和阿里集团的各主要业务中所使用的底层密码库,目前开源出来供业界使用。BabaSSL 广泛的应用在包括网络、存储、移动端 App 等场景中。

Tengine 来源于 Nginx,所以默认使用的是 OpenSSL。此次 Tengine 针对 BabaSSL 中的 NTLS 功能进行了适配,用户如果选择使用 BabaSSL 作为 Tengine 的底层密码库来实现通信加密的能力,则可以无需对 Tengine 进行任何代码改动,原生开启 NTLS 能力。

PART. 3 Tengine 启用 NTLS

具体来说,此次在 Tengine 中增加了几个新的指令,对 NTLS 进行支持。

1. 下载 BabaSSL 和 Tengine

  • 前往 👇 下载 BabaSSL 的源代码包:

https://github.com/BabaSSL/BabaSSL/releases

  • 前往 👇 获取 Tengine 的最新代码:

「git clone」

https://github.com/alibaba/tengine.git

2. 编译 BabaSSL 和 Tengine

使用如下配置:

./configure --add-module=modules/ngx_openssl_ntls \
    --with-openssl=../path/to/BabaSSL \
    --with-openssl-opt="--strict-warnings enable-ntls" \
    --with-http_ssl_module --with-stream \
    --with-stream_ssl_module --with-stream_sni

3. 配置 Tengine 开启 NTLS

一个开启了 NTLS 的 Tengine 配置文件的例子:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    server {
        listen       443 ssl;
        server_name  localhost;
        enable_ntls  on;
        ssl_sign_certificate        server_sign.crt;
        ssl_sign_certificate_key    server_sign.key;
        ssl_enc_certificate         server_enc.crt;
        ssl_enc_certificate_key     server_enc.key;
        location / {
            return 200 "body $ssl_protocol:$ssl_cipher";
        }
    }
}
stream {
     server {
        listen       8443 ssl;
        enable_ntls  on;
        ssl_sign_certificate        server_sign.crt;
        ssl_sign_certificate_key    server_sign.key;
        ssl_enc_certificate         server_enc.crt;
        ssl_enc_certificate_key     server_enc.key;
        return "body $ssl_protocol:$ssl_cipher";
    }
}

4. 测试 NTLS

可以使用 BabaSSL 的 s_client 工具对开启了 NTLS 的 Tengine 进行测试。

「具体可以参考」:

https://babassl.readthedocs.io/zh/latest/Tutorial/SM/ntls/

PART. 4 总 结

随着互联网业务的发展,在新时期下,数据成为了影响人们正常生活的核心要素。

因此数据安全和个人信息保护等问题变得更加需要重视,国家近期也针对数据安全领域进行了相关立法。

密码学技术作为整个信息安全领域的基础技术能力,对数据安全也存在着很大的影响。同时密码行业是属于受到国家强监管的行业,其相关技术的应用和实施均有一定的特殊性。

BabaSSL 作为一个开源的密码库,其核心目标之一就是为用户提供合规的技术能力,使得用户在符合要求的情况下可以更加便捷的将国家核定的技术标准应用起来。从而在满足技术合规的要求,也同时实现了对数据安全需求的达成。

Tengine 作为国内著名的 Web 服务器和反向代理开源软件,在国内各行业的应用十分广泛,同时也是网络通信领域中实现对数据进行加密的关键开源软件。此次 Tengine 官方对 BabaSSL 进行适配和支持,让用户可以更加便捷的使用 BabaSSL 所提供的商用密码能力,也必将进一步的扩大各行业对商用密码算法的应用落地。

BabaSSL 在未来会持续在技术合规和前沿密码学等方向上持续演进,给广大用户带来高效、易用、安全、稳定的密码学基础库。

BabaSSL 的代码目前托管在 Github 上:https://github.com/BabaSSL/BabaSSL

欢迎广大开发者积极参与到 BabaSSL 的建设中,为我国密码行业的发展壮大贡献力量!

本周推荐阅读

TLS 握手带宽直降 80%,BabaSSL 是怎么做到的

RFC8998+BabaSSL---让国密驶向更远的星辰大海

还在为多集群管理烦恼吗?OCM来啦!

一行降低 100000kg 碳排放量的代码!

img

相关文章
|
2月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
2月前
|
tengine 应用服务中间件 Linux
Tengine、Nginx安装PHP命令教程
要在阿里云Linux上安装PHP,请先更新YUM源并启用PHP 8.0仓库,然后安装PHP及相关扩展。通过`php -v`命令验证安装成功后,需修改Nginx配置文件以支持PHP,并重启服务。最后,创建`phpinfo.php`文件测试安装是否成功。对于CentOS系统,还需安装EPEL源和Remi仓库,其余步骤类似。完成上述操作后,可通过浏览器访问`http://IP地址/phpinfo.php`测试安装结果。
|
4月前
|
应用服务中间件 Linux PHP
Linux搭建tengine2.0<Nginx>+php7环境
本文介绍了在Linux系统上搭建Tengine 2.0(一个Nginx的增强版本)和PHP 7环境的详细步骤,包括创建安装目录、下载源码包及依赖库、编译安装Nginx、配置Nginx、安装PHP及其依赖、设置PHP-FPM、配置环境变量、安装Git和Composer,以及服务管理和日志查看等。
98 0
|
6月前
|
tengine 安全 应用服务中间件
修改Nginx/Tengine版本名称伪装任意WEB SERVER
修改Nginx/Tengine版本名称伪装任意WEB SERVER
|
6月前
|
tengine 应用服务中间件 nginx
既然Tengine比Nginx更强大,为什么Tengine没有取代Nginx呢?
既然Tengine比Nginx更强大,为什么Tengine没有取代Nginx呢?
251 0
|
tengine 移动开发 网络协议
Nginx之Tengine主动健康检查解读
Nginx之Tengine主动健康检查解读
|
tengine 应用服务中间件 Linux
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
545 0
|
7月前
|
tengine 应用服务中间件 nginx
Tengine有没有非开源的支持nginx的steam quic协议?
【1月更文挑战第15天】【1月更文挑战第75篇】Tengine有没有非开源的支持nginx的steam quic协议?
103 10
|
7月前
|
tengine Ubuntu 应用服务中间件
憧憬博客Nginx到Tengine的迁移
憧憬博客Nginx到Tengine的迁移
101 0
|
tengine 安全 应用服务中间件
源码安装----Tengine(nginx的进阶版)
源码安装----Tengine(nginx的进阶版)
343 1