找回密码
 会员注册
查看: 13|回复: 0

得物网络优化-TLS升级最佳实践

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72092
发表于 2024-10-7 18:55:16 | 显示全部楼层 |阅读模式
背景得物App的图片、视频等资源有反馈加载较慢、有卡顿感。得物App的图片、视频等资源使用阿里云CDN进行下发,客户端与CDN服务器之间的请求耗时较长对用户体验产生了极大影响。数据分析得物App核心的CDN域名共10个,其中流量最大的域名是cdn.poizon.com,占比92%,使用场景包括图片、视频、H5资源、小文件等,涉及得物App全域。因此,本文主要以cdn.poizon.com为主讲解CDN网络性能优化过程。使用网络监控平台-CDN性能大盘对CDN cdn.poizon.com域名线上性能指标数据进行分析。查看2021.6.17到2021.6.24一周数据:iOS端总耗时(仅含建连过程)在600ms以上(2021.6.23号最高为779ms);Android端总耗时(仅含建连过程)在350ms以上(2021.6.23号最高为369ms)。可以看出双端CDN cdn.poizon.com请求耗时都很大,且iOS比Android更严重。?iOS总耗时(建连)?Android总耗时(建连)?再依次分析CDN请求各阶段耗时详情数据:iOS端SSL耗时(下文统称为TLS耗时)在177ms以上(2021.6.23号最高为249ms),占总耗时(仅含建连过程)的32%;Android端TLS耗时在80ms以上(2021.6.23号最高为81ms),占总耗时(仅含建连过程)的22%。显然双端CDN cdn.poizon.com TLS耗时较长是导致总耗时(建连)较长的主要原因。?iOS TLS耗时?Android TLS耗时?问题定位由于阿里云CDN TLS版本配置过低:最高仅支持TLS1.2,客户端使用TLS1.2协议请求阿里云CDN,TLS1.2协议握手需要经过2RTT,导致TLS阶段耗时较长。解决思路为了发挥TLS1.3 0RTT的性能优势及安全强化优势,因此决定将TLS版本升级到1.3。?方案调研TLS简介TLS(Transport Layer Security)安全传输层协议,用于保证请求双端之间的保密性和数据完整性。TLS 1.0版本从1999年发布,之后在2006年和2008年先后发布了TLS1.1和TLS1.2版本。TLS协议发布后便正式成为互联网传输层加密的标准,目前使用最广泛的为TLS1.2版本。然而,TLS1.2协议已经发布有13年之久,在这期间有许多新的漏洞和缺陷被发现,如:性能较差:握手过程需要经过2RTT;安全性较低:存在针对SHA1造成的碰撞攻击,存在针对CBC模式加密算法的攻击等。?因此,为解决TLS1.2版本存在的性能问题及安全问题,TLS1.3版本应运而生。?TLS1.2与TLS1.3区别与优劣对比?性能提升TLS1.3版本的握手流程相比TLS1.2版本进行了优化,一般为1RTT,复用情况下可达到0RTT。相比TLS1.2版本2RTT,TLS1.3可以降低一半以上的握手耗时。?TLS1.2协议的握手过程?Wireshark抓包如上图,可以看出,TLS1.2协议需要两次往返(2RTT)完成握手。客户端发送Client Hello服务端返回Server Hello,Certificate,Server Key Exchange,Server Hello Done客户端发送Client Key Exchange,Change Cipher Spec,Encrypted Handshake Message服务端返回New Session Ticket,Change Cipher Spec,Encrypted Handshake Message客户端发送Application Data服务端返回Application Data?TLS1.3协议的握手过程Wireshark抓包如上图,可以看出,TLS1.3协议仅需要一次往返(1RTT)就可以完成握手。客户端发送Client HelloClient Hello包括signature_algorithms,key_share,psk_key_exchange_modes,pre_shared_key?服务端返回Server Hello,Change Cipher Spec,Application Data?Server Hello包括key_share,pre_shared_key?客户端发送Change Cipher Spec,Application Data?服务端返回Application Data?安全提升TLS1.3版本相比TLS1.2版本,在密钥交换,对称加解密,压缩等环节进行了优化。?密钥交换阶段支持PFS(Prefect Forward Security)前向安全性,废弃DSA证书,RSA填充模式更改为PSS,禁用了自定义的DH组参数。?对称加解密阶段?TLS1.3仅支持5种高效的加密算法,其他不安全的算法(TLS1.2支持多达37个加密算法)在TLS1.3版本都被禁用。禁用CBC模式加密算法,禁用较为陈旧的RC4流加密算法,禁用容易造成碰撞攻击的SHA1加密算法。?压缩阶段?禁用TLS压缩:TLS压缩存在安全漏洞,通过CRIME攻击(植入JS脚本一位一位保留破解Cookie)可以窃取启用TLS压缩的HTTPS/SPDY协议传输的Cookie信息,拿到Cookie信息后攻击者可以进行请求劫持及进一步攻击。对ServerHello之后的握手消息进行加密:拓展信息被封装到EncryptedExtension消息中传输,避免数据明文传输,提高数据安全性。?预期收益TLS 1.3与TLS 1.2线下性能测试对比(同源验证):iOS端总耗时(建连)减少18.26%,TLS耗时减少30.83%;Android端总耗时(建连)减少28.7%,TLS耗时减少26.6%双端线上实际平均耗时(包含TCP复用)预计减少10%左右iOS线下100次请求(每次重新建连)测试数据:Android线下300次请求(每次重新建连)测试数据:竞品调研抖音,淘宝等主流App CDN已全面升级到TLS1.3,验证了TLS1.3的可行性及性能优势。AppTLS1.3TLS1.2http2.0抖音是是是拼多多是是是淘宝是是是哈啰是是是bilibili是是是兼容性调研?阿里云CDN调研?与阿里云方沟通确认阿里云CDN支持TLS版本自动降级,在客户端不支持TLS1.3的情况下自动降级使用TLS1.2与客户端建连。?客户端双端网络库调研分析开发环境一周数据可知,双端主流机型及系统版本均已支持TLS1.3,且支持TLS1.3与TLS1.2自动降级。iOS主流机型数据?注:771 = TLS1.2,772 = TLS1.3Android主流机型数据方案设计执行计划?提前在七牛云CDN添加cdn.poizon.com镜像配置(TLS协议,TLS算法,http协议等配置与阿里云完全一致)作为备用资源(已配置,且七牛云流量权重占比40%)2021.6.25 2:00 执行CDN cdn.poizon.com TLS1.3变更(影响全局图片、视频、H5资源、小文件等)在阿里云CDN控制台操作开启TLS1.3监控方案CDN cdn.poizon.com监控点及异常判定方案。1. 无线平台-网络监控请求异常率:分钟级请求异常率大于5%持续10分钟以上总耗时异常:分钟级总耗时降幅大于30%持续10分钟以上(10%左右的降幅符合预期收益);分钟级总耗时涨幅大于20%持续10分钟以上TLS耗时异常:分钟级TLS耗时降幅大于70%持续10分钟以上(50%左右的降幅符合预期收益);分钟级TLS耗时涨幅大于20%持续10分钟以上responseSIze:分钟级responseSIze上下波动大于20%持续10分钟以上2. 阿里云CDN-实时监控质量监控:分钟级2xx,4xx,5xx状态码占比上下波动大于5%持续10分钟以上?还原方案CDN cdn.poizon.com调整七牛云权重为100%,将流量立即切到七牛云备用资源(TLS协议,TLS算法,http协议等配置和阿里云完全一致)阿里云CDN控制台操作CDN cdn.poizon.com关闭TLS1.3(还原到变更前的状态)?验证CDN cdn.poizon.com对应源host(du-img.oss-cn-shanghai.aliyuncs.com)请求阿里云已降到TLS1.2?CDN cdn.poizon.com分批次扩大阿里云权重(10%,30%,60%)?CDN cdn.poizon.com阿里云权重10%,通过查CDN cdn.poizon.com阿里云/七牛云请求次数的实时监控数据,确认阿里云对比七牛云请求次数占比是否达到10%,同时验证CDN cdn.poizon.comTLS耗时整体变高。符合当前权重后,再进行下一步权重调整。CDN cdn.poizon.com阿里云权重30%,通过查CDN cdn.poizon.com 阿里云/七牛云请求次数的实时监控数据,确认阿里云对比七牛云请求次数占比是否达到30%,同时验证CDN cdn.poizon.com TLS耗时整体变高。符合当前权重后,再进行下一步权重调整。CDN cdn.poizon.com阿里云权重60%,通过查CDN cdn.poizon.com阿里云/七牛云请求次数的实时监控数据,确认阿里云对比七牛云请求次数占比是否达到60%,同时验证CDN cdn.poizon.com TLS耗时整体变高。符合当前权重后,则流量还原回阿里云完成。检测各指标已还原到变更前的标准,则还原成功说明:cdn.poizon.com TTL 60scdn.poizon.com凌晨2:00流量较小,流量全切七牛云不会对七牛云95峰值造成影响,因此不会导致费用增加。验证方案2021.6.25 2:00 ~2.10?通过准备好的release包验证CDN请求是否已TLS1.3连接?2021.6.25 2:10 ~4:00?APP业务主链路按照以测试用例进行回归测试及兼容测试:社区首页,交易首页,社区详情页,交易详情页,视频,视频详情页,视频/图片发布,直播,下单流程,H5页面等主链路图片,视频及资源是否加载正常。关注线上监控数据:Crash率,用户反馈等CDN 网络监控点及异常判定方案无线平台-网络监控请求异常率:分钟级请求异常率大于5%持续10分钟以上总耗时异常:分钟级总耗时降幅大于30%持续10分钟以上(10%左右的降幅符合预期收益);分钟级总耗时涨幅大于20%持续10分钟以上TLS耗时异常:分钟级TLS耗时降幅大于70%持续10分钟以上(50%左右的降幅符合预期收益);分钟级TLS耗时涨幅大于20%持续10分钟以上responseSIze:分钟级responseSIze上下波动大于20%持续10分钟以上阿里云CDN-实时监控质量监控:分钟级2xx,4xx,5xx状态码占比上下波动大于5%持续10分钟以上2021.6.25 10:00 ~19:00持续关注线上监控数据?优化成果CDN cdn.poizon.com开启TLS1.3 优化数据:7月1号对比6月24号数据,双端总耗时(建连)、TLS耗时均有明显降低:iOS总耗时:281ms -> 237ms,降低15%+总耗时(建连):704ms -> 574ms,降低18%+TLS耗时:210ms -> 137ms,降低34%+Android总耗时:307ms -> 269ms,降低12%+总耗时(建连):369ms -> 325ms,降低12%+TLS耗时:83ms -> 71ms,降低14%+相关文档TLS 1.3科普——新特性与协议实现:https://blog.csdn.net/andylau00j/article/details/79269499TLS协议分析 与 现代加密通信协议设计:https://blog.helong.info/blog/2015/09/07/tls-protocol-analysis-and-crypto-protocol-design/有赞TCP网络编程最佳实践:https://tech.youzan.com/you-zan-tcpwang-luo-bian-cheng-zui-jia-shi-jian/几幅图,拿下HTTPS:https://mp.weixin.qq.com/s/Drc6s72GoiKwj3FOoRG6Yw*文:Aix得物技术? 关注我们,做最潮技术人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-11 00:48 , Processed in 0.609212 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表