网不好怎么办?TLS握手带宽直降80%,BabaSSL是怎么做到的?| 龙蜥技术

简介: 为了保障数据的安全性,客户端会先和服务器进行 TLS 握手,有什么办法可以减少 TLS 握手的带宽消耗呢?

编者按:BabaSSL 是一款开源的密码库产品,在 GitHub 和龙蜥社区开源,并加入到龙蜥社区(OpenAnolis)的商密软件栈 SIG 组,且作为 Anolis 商密 OS 的核心组件之一。本文作者张成龙(刻一),是蚂蚁集团技术专家,负责BabaSSL密码库产品,也是OpenSSL贡献者之一。

bass.png

前言

随着 5G 网络的建设,加速了移动互联网应用的发展,包括短视频、在线教育、物联网等领域。但是在现实生活中,依然存在网络信号不好的场景,包括地下商场、车库、地铁等地方,或者是由于网络拥塞导致的弱网环境下,应用在使用过程中加载缓慢,导致用户体验变差。这时候就需要对弱网环境进行优化,而手段之一就是想办法降低网络数据传输

为了保障数据的安全性,通常使用 TLS/SSL 进行加密传输。当客户端访问服务器后台时,客户端会先和服务器进行 TLS 握手。在 TLS 完整握手时,服务端会发送证书链用于身份认证,而握手时数据传输的大部分都来自于证书。

有什么办法可以减少 TLS 握手的带宽消耗呢?如果证书可以被压缩,甚至“消失”,那就可以大大降低数据传输。RFC 8879 TLS Certificate Compression 就是为了解决这个问题,在 TLS 1.3 握手时提供证书压缩功能。

BabaSSL 是一款开源的密码库产品,在 GitHub 和 OpenAnolis 龙蜥社区开源,并加入到龙蜥社区(OpenAnolis)的商密软件栈 SIG 组,且作为 Anolis 商密 OS 的核心组件之一,替代 OpenSSL 成为系统默认的基础密码算法库;基于  OpenSSL 1.1 版本并保持兼容性,在 OpenSSL 的基础上实现了一系列自主可控的安全特性,包括各种国密算法、国密标准的实现以及大量提高密钥安全强度的特性实现。目前,BabaSSL 已经支持 TLS 证书压缩功能,而 OpenSSL 还不支持。

TLS 证书压缩介绍

图片.PNG

1、如果客户端支持证书压缩,在 ClientHello 消息中携带 compress_certificate 扩展,该扩展中包含支持的压缩算法列表;

2、服务端收到 ClientHello,发现对方支持证书压缩,如果服务端也支持证书压缩,同时支持客户端声明的压缩方法,则使用该算法压缩 Certificate 消息;

3、服务端发送 CompressedCertificate 消息,代替原来的 Certificate 消息,CompressedCertificate 消息中包含压缩算法,解压后的长度和压缩的 Certificate 消息;

4、 客户端收到 CompressedCertificate 消息后,使用其中的 algorithm 解压,如果解压成功,则进行后续处理,否则关闭连接并发送 bad_certificate 警告。服务端发送 CertificateRequest 消息,然后客户端发送 CompressedCertificate 消息的处理流程和上述类似,不再赘述。

标准中定义的压缩算法:

image.png

除了 RFC 中定义的这 3 种算法,用户还可以使用其他算法,值 16384 到 65535 用于留给用户自已使用。

实战TLS证书压缩

开源 BabaSSL 密码库已经支持 TLS 证书压缩功能,需要在构建 BabaSSL 时开启该功能,config 后添加 enable-cert-compression。

可以在设置 SSL_CTX 时,添加证书压缩算法,代码示例如下:

#include <openssl/ssl.h>
#include <zlib.h>static int zlib_compress(SSL *s,const unsigned char *in, size_t inlen,unsigned char *out, size_t *outlen)
{if (out == NULL) {*outlen = compressBound(inlen);return 1;}if (compress2(out, outlen, in, inlen, Z_DEFAULT_COMPRESSION) != Z_OK)return 0;return 1;
}static int zlib_decompress(SSL *s,const unsigned char *in, size_t inlen,unsigned char *out, size_t outlen)
{size_t len = outlen;if (uncompress(out, &len, in, inlen) != Z_OK)return 0;if (len != outlen)return 0;return 1;
}int main() {const SSL_METHOD *meth = TLS_client_method();SSL_CTX *ctx = SSL_CTX_new(meth); /* 配置证书、私钥... *//* 例如:设置压缩算法为zlib */SSL_CTX_add_cert_compression_alg(ctx, TLSEXT_cert_compression_zlib,zlib_compress, zlib_decompress);SSL *con = SSL_new(ctx);/* 握手... */return 0;
}

也可以使用 BabaSSL 提供的 s_client 和 s_server 来使用 TLS 证书压缩功能:

# 服务端
/opt/babassl/bin/openssl s_server -accept 127.0.0.1:34567 -cert server.crt -key server.key -tls1_3 -cert_comp zlib -www -quiet# 客户端
/opt/babassl/bin/openssl s_client -connect 127.0.0.1:34567 -tls1_3 -cert_comp zlib -ign_eof -trace

测试压缩算法和压缩率

服务端配置证书链,CA 证书 + 中间 CA + 域名证书,TLS 1.3 握手且开启证书压缩,对比各个压缩算法的压缩率如下:

image.png

有些压缩算法是支持设置字典的,比如 brotli、zstd。可以提前计算好字典内容,预埋到客户端和服务端,然后在压缩和解压的时候使用该字典,可以让证书链完美“消失”。例如上表中使用 zstd + 字典时,压缩前的 Certficate 消息为 2666 字节,压缩后只有 18 字节。

开启证书压缩功能后,可以大大降低握手时的传输,尤其是使用字典时,例如 zstd + 字典时数据如下:

关闭证书压缩,握手共传输:3331 字节

开启证书压缩:握手共传输:698 字节

压缩率:698/3331 * 100% = 20.95%,握手带宽降低接近 80%。

结语

TLS 会话复用时不需要发送证书,所以,在完整握手时,就可以通过证书压缩来优化。在双向认证的场景下,即服务端开启了客户端认证,如果客户端和服务端都开启 TLS 证书压缩功能,压缩效果更明显,可以节省 TLS 握手中 80% 以上的带宽。后面 BabaSSL 还会支持 Compact TLS 1.3,即 TLS 1.3 的袖珍版,保持协议同构的前提下,占用最小的带宽。

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业级数据湖实践

简介&#xff1a;2021云栖大会云原生企业级数据湖专场&#xff0c;阿里云智能高级解决方案架构师周皓为我们带来《企业级数据湖最佳实践》的分享。 本文主要分享了数据湖的核心能力及几个最佳实践案例。 以下是精彩视频内容整理 一、统一数据存储&#xff0c;多引擎对接&…

浅述 Docker 的容器编排

作者 | 天元浪子来源 | CSDN博客概述作为容器引擎&#xff0c;Docker为容器化的应用程序提供了开放标准&#xff0c;使得开发者可以用管理应用程序的方式来管理基础架构&#xff0c;实现快速交付、测试和部署代码。随着容器的大量使用&#xff0c;又产生了如何协调、调度和管理…

Cloudera CDP 企业数据云测试开通指导

简介&#xff1a; 基于阿里云部署的 Cloudera CDP 企业数据云平台已经进入公测阶段&#xff0c;本文详细介绍了相关试用/试用流程。 基于阿里云部署的 Cloudera CDP 企业数据云平台已经进入公测阶段&#xff0c;如对该平台感兴趣&#xff0c;可以使用下面的流程进行试用。 如需…

重装linux之后gcc等下载不了,Redhat linux下安装gcc

一、安装步骤1、使用whichgcc命令发现gcc没有安装2、拷贝gcc-3.2.2-5.i386.rpm 尝试安装说明在这之前还需要先装binutils、cpp、glibc-devel这三个包3、拷贝binutils-2.13.90.0.18-9.i386.rpmcpp-3.2.2-5.i386.rpmglibc-devel-2.3.2-11.9.i386.rpm 到install目录分别安装rpm -i…

解决 Serverless 落地困难的关键,是给开发者足够的“安全感”

简介&#xff1a;越来越多的云产品都会向全托管、Serverless 形态演进。当云的产品体系 Serverless 化达到一个临界值&#xff0c;通过函数计算这样的 Serverless 计算服务结合其他 Serverless 形态的云服务&#xff0c;能够完整的实现整个应用时&#xff0c;Serverless 就会变…

如何通过任务调度实现百万规则报警

简介&#xff1a;报警是一个公司的日常需求&#xff0c;常见的形态除了满足运维过程中的基础设施监控报警&#xff08;CPU/内存/磁盘等&#xff09;之外&#xff0c;部分公司也会在应用指标&#xff08;如 QPS、RT 等&#xff09;及业务指标&#xff08;如 GMV/日活 等&#xf…

linux无法关机 grub2,Ubuntu关机卡住无法关机如何解决?

电脑无法关机是最让人头疼的事&#xff0c;在Ubuntu系统中&#xff0c;有时会遇到关机卡住的情况&#xff0c;导致关不了机&#xff0c;遇到这种情况千万不要强制关机&#xff0c;下面小编就教你如何解决这个问题。解决方案&#xff1a;在终端用sudo vi打开/boot/grub/grub.cfg…

不用跑项目,组件效果所见即所得,绝了!

作者 | 零一来源 | 前端印象大家好&#xff0c;看到一个好东西&#xff0c;忍不住来分享一下。我们在写需求时都会封装一些组件&#xff0c;然后会为该组件定义一些 props &#xff0c;使其跟业务分离&#xff0c;变得更通用。写完组件后需要验证一下组件的效果&#xff0c;也就…

Kubernetes 已经成为云原生时代的安卓,这就够了吗?

简介&#xff1a;本文将介绍如何在 Kubernetes 上构建新的应用管理平台&#xff0c;提供一层抽象以封装底层逻辑&#xff0c;只呈现用户关心的接口&#xff0c;使用户可以只关注自己的业务逻辑&#xff0c;管理应用更快更安全。 作者&#xff1a;司徒放 导语&#xff1a;云原生…

我们如何实现“业务 100% 云原生化,让阿里中间件全面升级到公共云架构”?

简介&#xff1a;在今年的天猫双 11 中&#xff0c;中间件支撑了 5403 亿的交易量&#xff0c;并全面升级到了公共云架构。 此次的架构升级&#xff0c;是以开源为内核、以公共云为基础、以 OpenAPI 进行解偶扩展&#xff0c;在架构上&#xff0c;对开源、自研、商业化进行统一…

两台电脑usb直连 linux,两台电脑怎么传文件没有网线(两台电脑usb直连)

对于两台电脑的数据传输而言&#xff0c;当下可通过各类社交(QQ&#xff0c;陌陌、微信.....)、传输(飞鸽传书、360快传......)软件都可以实现但由于各类软件需要下载安装以及相关软件学习使用成本&#xff0c;迫使很多用户都放弃了这种想法那么&#xff0c;今天我们对两台需要…

Gartner发布2022年数据分析十二大趋势:数据和分析将成为创新起源

数据与分析将会成为创新的起源&#xff0c;为企业发展创新助力同时&#xff0c;还将有基于数据的变现、降本增效&#xff0c;基于数据与分析的决策能力已成为有韧性企业的最核心能力。 作者 | 宋慧 出品 | CSDN 云计算 对数据的分析已经被企业与技术界愈加重视&#xff0c;国际…

重拾面向对象软件设计

简介&#xff1a;从上个世纪五十年代冯诺依曼创造第一台计算机开始&#xff0c;一直到现在只有短短70年时间&#xff0c;从第一门计算机语言FORTRAN&#xff0c;到现在我们常用的C&#xff0c;JAVA&#xff0c;PYTHON等&#xff0c;计算机语言的演进速度远超我们所使用的任何一…

数据与AI如何提升IT运维价值?锐捷发布乐享智能运维管理平台

运维的价值如何体现&#xff0c;听刚刚发布锐捷乐享智能运维管理平台的锐捷网络怎么说。 编辑 | 宋慧 出品 | CSDN云计算 运维可能是 IT 技术人中最苦的岗位。 IT系统运维工作就像安全一样&#xff0c;平稳运行不出事故是“份内事”&#xff0c;出了事故则要冲到修复一线。因此…

阿里云服务网格ASM集成SLS告警

简介&#xff1a;随着微服务的流行&#xff0c;微服务的架构也在不断的发展演进&#xff0c;Spring Cloud 与 Dubbo为代表的微服务开发框架也得到了普及和落地&#xff1b;在云原生时代&#xff0c;无侵入的服务网格&#xff08;Service Mesh&#xff09;开始走向成熟&#xff…

走进英特尔中国研究院探索创新日:发布最新科研成果与创新策略

如何穿越技术周期&#xff0c;英特尔揭秘创新策略与最新科研进展。 “2022英特尔中国研究院探索创新日”在北京举行。此次活动以“智探索汇无界”为主题&#xff0c;展示了英特尔中国研究院一系列前瞻性研究项目和创新成果。活动中&#xff0c;英特尔研究院副总裁、英特尔中国研…

零基础玩转SLS日志查询-SLS Query Builder发布

简介&#xff1a;日志服务&#xff08;Log Service&#xff0c;简称 SLS&#xff09; 是阿里云提供的行业领先的日志大数据解决方案&#xff0c;一站式提供数据收集、清洗、分析、可视化、告警等功能。智能查询分析是数据中台重要的一环&#xff0c;SLS支持秒级查询10亿到千亿级…

块存储监控与服务压测调优利器-EBS Lens发布

简介&#xff1a;SLS团队联合EBS团队发布了EBS Lens&#xff0c;针对块存储提供数据分析、资源监控的功能&#xff0c;可以帮助用户获取云上块存储资源信息与性能监控数据、提升云上块存储资源的管理效率、高效分析业务波动与资源性能消耗情况。 EBS监控现状 块存储是阿里云为…

阿里云 EventBridge 事件驱动架构实践

简介&#xff1a;我们认为 EventBridge 是云原生时代新的计算驱动力&#xff0c;这些数据可以驱动云的计算能力&#xff0c;创造更多业务价值。 作者&#xff1a;周新宇 本文内容整理自 中国开源年会 演讲 首先做一个自我介绍&#xff0c;我是 RocketMQ 的 PMC member 周新宇…

代理网关设计与实现(基于NETTY)

简介&#xff1a;本文重点在代理网关本身的设计与实现&#xff0c;而非代理资源的管理与维护。 作者 | 新然 来源 | 阿里技术公众号 一 问题背景 平台端购置一批裸代理&#xff0c;来做广告异地展现审核。从外部购置的代理&#xff0c;使用方式为&#xff1a;通过给定的HTTP …