你不知道的 HTTPS 压测

简介: 随着互联网安全规范的普及,使用 HTTPS 技术进行通信加密,实现网站和 APP 的可信访问,已经成为公认的安全标准。本文将介绍针对 HTTPS 协议做压力测试的关注点,以及使用 PTS 做 HTTPS 压测的技术优势和最佳实践。

作者:拂衣


引言


随着互联网安全规范的普及,使用 HTTPS 技术进行通信加密,实现网站和 APP 的可信访问,已经成为公认的安全标准。本文将介绍针对 HTTPS 协议做压力测试的关注点,以及使用 PTS 做 HTTPS 压测的技术优势和最佳实践。


常见的网站或者 APP 中需要做压测的 3 种场景:


  • 新开发的系统或功能上线前需要了解其性能水位情况。
  • 对系统进行技术调优、系统扩容前后通过压测进行性能比对。
  • 参加平台活动前对系统进行性能评估。


什么是 HTTPS


HTTPS 的英文全称是:Hyper Text Transfer Protocol over Secure Socket Layer,它是以安全为目标的 HTTP 通道。从全称上可以看出,它其实不是一种新的应用层协议,只是 HTTP 协议将通信接口用 SSL 替代了 TCP。HTTP 协议中,应用层 HTTP 直接与传输层 TCP 通信,在 HTTPS 协议中 ,应用层 HTTP 与 SSL 通信,SSL 再与传输层的 TCP 通信,具体如图:


1.png


HTTPS 通过 SSL 层的加密,可以防止网站被篡改和劫持。下面我们简单看下 HTTPS 是如何进行加密解密的:


首先客户端和服务端会协商加密算法和协议版本。协商结束后,服务端发送公钥给客户端,客户端拿到公钥后,生成一个随机密码串(Pre-master secret),并通过公钥加密返回给服务端。服务端使用私钥解密密文后,得到此随机密码串(Pre-master secret),之后通过协商的随机数和加密算法,生成对称加密密钥。至此,双方得到了同一个密钥,后续使用此密钥实现对称加密解密。


2.png


我们知道对称加密性能更好,但只要持有密钥,就能将劫持的密文解密,无法解决被劫持的问题。非对称加密相对更安全,但同时加密解密性能开销大。可以看出 HTTPS 在握手阶段使用了非对称加密,在后续的通信中使用了对称加密,既保证了安全性,又最大限度保证了性能。


HTTPS 压测的关注点


SSL 握手策略


HTTPS 在握手阶段有加密解密的过程,所以相比 HTTP 更消耗计算资源。压测引擎为了模拟海量用户执行请求,往往底层会在全局或线程维度,复用 TCP 连接和 SSL 握手信息。这提高了施压机的性能,但对希望每次循环模拟不同客户端行为的场景来说,施压机只模拟了足够的流量压力,并没有模拟足够的 SSL 握手计算压力,可能造成压力模拟不够准确的问题,如下图所示:


3.png


因此,在 HTTPS 压测中,需要根据压测场景的具体业务逻辑,指定每次循环是否重置 SSL 握手状态,准确模拟 SSL 握手计算压力。


SSL 协议版本


HTTPS 压测,在客户端(施压机)和服务端进行 SSL 握手的第一步,客户端会告知给服务端自己支持的最高 SSL 协议版本,然后服务端会从自己和客户端支持版本的交集中,取最高的版本作为实际使用的 SSL 版本。


在压测时,需要评估出真实客户端的主流版本,并配置到施压引擎上。避免因 SSL 版本不同,造成 SSL 握手计算压力模拟不准确。


Why PTS—PTS 做 HTTPS 压测的优势


JMeter、Gatling、K6 等开源压测工具对 HTTPS 有不同程度的支持。JMeter[1]支持配置循环是否重置 SSL 握手状态,并且支持配置客户端 SSL 协议版本,但是默认不支持 HTTP2 协议。Gatling[2]默认每个虚拟用户共享 SSL 上下文,不支持控制循环重置 SSL 握手状态。K6[3]目前只支持设置 SSL 协议版本。


PTS 作为云上压测工具,支持如下 HTTPS 相关特性:


  • 支持 HTTP2
    HTTP2 相比较 HTTP1.1 性能大幅提升,且目前主流浏览器均已支持 HTTP2 协议。为了模拟真实客户端,建议使用 HTTP2 协议。
  • 支持设置 SSL 握手策略
    支持配置循环是否重置 SSL 握手状态,可以根据业务场景,选择是否重置。
  • 支持指定 SSL 协议版本


使用 PTS 压测,可以更真实的模拟客户端发起的 HTTPS 压力,使压测结果更可信。


How to—如何用 PTS 做 HTTPS 压测


设置 SSL 握手策略


4.png


对于 HTTPS 压测,在串联链路每次循环时,需要选择是否重置 SSL 连接状态。如果选择重置,在串联链路每一次循环执行时,会重新初始化 SSL 状态,这样可以更准确模拟每次循环代表不同用户的压测场景,同时会对施压机带来一定的性能开销。


使用场景


  • 场景一:HTTPS 压测,希望模拟 100 个用户登录,同时保持这 100 个用户不断重复访问系统。此时串联链路每次循环执行,模拟的是同一个虚拟用户的行为。应将此开关置为“否”,然后设置并发数为 100。


  • 场景二:HTTPS 压测,希望模拟 5 分钟内,每个时刻都有 100 个不同用户对系统访问。此时串联链路每次循环执行,模拟的是不同虚拟用户的行为。为了保证压力模拟真实性,应将此开关置为“是”,然后设置并发数为 100。同时因为打开此开关后,施压机有额外的性能开销,建议扩展施压机IP数。


设置 SSL 协议版本


这里列出一些常用浏览器对 SSL 版本的支持情况供您参考:


5.png


可以看出,主流浏览器在 2018~2020 年前后都支持了 TLSv1.3。因此,如果您的压测场景模拟的客户端较新,建议您选择 TLSv1.3 作为 SSL 版本;相反,如果您的压测场景需要模拟旧版本的浏览器客户端,建议您选择 TLSv1.2 作为 SSL 版本。


如何录制 HTTPS 流量


各压测工具都提供了基于代理的流量录制工具,方便录制下客户端的流量,并快速构建压测脚本。对于 HTTPS 协议的录制,除了配置代理,还需要信任证书,操作比较复杂。


PTS 提供了免配置证书的录制方案:浏览器插件,支持快速录制 HTTPS 流量,解密并转换为 PTS 压测场景,同时支持导出为 JMeter 脚本,欢迎下载[4]使用,详细操作可参考文档[5]


6.png


同时针对移动流量录制,PTS 提供了云真机和本地设备 2 种方案。其中云真机已预置 PTS 代理配置,支持在浏览器操作手机,录制流量,无需配置代理和证书,详细操作可参考文档[6]


7.png


总结


综上,本文主要阐述了:


  • 什么是 HTTPS
  • HTTPS 压测中的注意点
  • 如何用 PTS 做 HTTPS 压测


更多交流,欢迎进钉钉群沟通,PTS 用户交流群号:11774967


同时,PTS 全新售卖方式来袭,基础版价格直降 50%!百万并发价格只需 6200!更有新用户 0.99 体验版、VPC 压测专属版,欢迎大家选购!


8.png


参考文档


[1] JMeter(官方文档):

https://jmeter.apache.org/usermanual/component_reference.html?spm=a2c6h.12873639.article-detail.4.6d4a7ca0EKzFeR#HTTP_Request


[2] Gatling(官方文档):

https://gatling.io/docs/gatling/reference/current/http/ssl/


[3] K6:

https://k6.io/docs/using-k6/options/#tls-version


[4] 下载(PTS HTTPS录制器插件):

https://chrome.google.com/webstore/detail/alibaba-cloud-pts%E5%BD%95%E5%88%B6%E5%99%A8/noonnhdncblnaknhoebaglpcihelliff


[5] 文档(PTS 录制器使用文档—Chrome 浏览器场景):

https://help.aliyun.com/document_detail/187749.html


[6] 文档(PTS 录制器使用文档—Android 手机端场景):

https://help.aliyun.com/document_detail/72519.html


[7] PTS HTTPS设置文档:

https://help.aliyun.com/document_detail/143194.html


点击此处,前往性能测试 PTS 官网页面了解更多!

相关文章
|
关系型数据库 MySQL 网络安全
MySQL容器化详细教程
上篇文章介绍了Docker工具的安装及常用命令使用。本篇文章我们会介绍如何在Docker中运行MySQL实例,可能有的小伙伴会问:为什么要在Docker里运行MySQL呢?因为在Docker里部署MySQL实例操作简单,不需要考虑操作系统等依赖差异,而且可以多实例部署,比如说我们原来服务器有安装MySQL5.7,我们想再运行MySQL8.0实例的话只需要用Docker启动MySQL8.0镜像即可。下面我们就来介绍下如何用Docker启动MySQL实例。
1666 0
MySQL容器化详细教程
|
机器学习/深度学习 人工智能 算法
基于深度学习的地面垃圾识别分类技术
AI垃圾分类系统结合深度学习和计算机视觉技术,实现高效、精准的垃圾识别与自动分类。系统集成高精度图像识别、多模态数据分析和实时处理技术,适用于市政环卫、垃圾处理厂和智能回收设备,显著提升管理效率,降低人工成本。
1644 1
基于深度学习的地面垃圾识别分类技术
|
人工智能 自然语言处理 前端开发
三大行业案例:AI大模型+Agent实践全景
本文将从AI Agent和大模型的发展背景切入,结合51Talk、哈啰出行以及B站三个各具特色的行业案例,带你一窥事件驱动架构、RAG技术、人机协作流程,以及一整套行之有效的实操方法。具体包含内容有:51Talk如何让智能客服“主动进攻”,带来约课率、出席率双提升;哈啰出行如何由Copilot模式升级为Agent模式,并应用到客服、营销策略生成等多个业务场景;B站又是如何借力大模型与RAG方法,引爆了平台的高效内容检索和强互动用户体验。
4385 5
|
JavaScript
基于Vue3实现简约型侧边栏
本文介绍了如何在Vue3项目中实现一个简约型侧边栏导航,包括配置路由、页面布局和导航交互,以及如何通过Vue Router和条件渲染实现动态内容展示。
1949 1
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)
|
存储 安全 Cloud Native
容器安全-镜像扫描
容器镜像安全至关重要,镜像扫描能检查镜像中的安全漏洞,防范云原生环境风险。72%客户拥有超过100个容器,安全问题日益凸显。两种扫描方案:定期扫描镜像注册表或集成到Pipeline中。此外,蜂巢提供全生命周期镜像扫描,包括漏洞、病毒检测,实时更新补丁数据库,并给出修复建议,助力企业保障容器安全。目前已服务100+头部客户。
|
JSON 运维 前端开发
lowcode 低代码前端框架 amis 调研
所谓低代码开发,即无需编码或只需少量代码就可以快速生成应用程序。也就是说,企业的应用开发通过“拖拉拽”的方式即可完成。
lowcode 低代码前端框架 amis 调研
|
Linux 数据库 Docker
CentOS 7安装Docker CE镜像报错问题解决
CentOS 7安装Docker CE镜像报错问题: ** 发现 2 个已存在的 RPM 数据库问题, 'yum check' 输出如下: 7:device-mapper-libs-1.02.170-6.el7_9.5.x86_64 是 7:device-mapper-libs-1.02.170-6.el7.x86_64 的副本 7:device-mapper-libs-1.02.170-6.el7_9.5.x86_64 有缺少的需求 device-mapper = ('7', '1.02.170', '6.el7_9.5')
CentOS 7安装Docker CE镜像报错问题解决
|
缓存 监控 Java
记一次JMeter压测HTTPS性能问题
问题背景在使用JMeter压测时,发现同一后端服务,在单机500并发下,HTTP和HTTPS协议压测RT差距非常大。同时观测后端服务各监控指标水位都很低,因此怀疑性能瓶颈在JMeter施压客户端。问题分析切入点:垃圾回收首先在施压机观察到CPU使用率和内存使用率都很高,详细看下各线程CPU、内存使用情况:top -Hp {pid}发现进程的CPU使用率将近打满,其中GC线程CPU使用率很高再看下g
1630 0
记一次JMeter压测HTTPS性能问题

热门文章

最新文章