作者:拂衣
引言
随着互联网安全标准的遍及,应用 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 通信,具体如图:
HTTPS 通过 SSL 层的加密,能够避免网站被篡改和劫持。上面咱们简略看下 HTTPS 是如何进行加密解密的:
首先客户端和服务端会协商加密算法和协定版本。协商完结后,服务端发送公钥给客户端,客户端拿到公钥后,生成一个随机明码串(Pre-master secret),并通过公钥加密返回给服务端。服务端应用私钥解密密文后,失去此随机明码串(Pre-master secret),之后通过协商的随机数和加密算法,生成对称加密密钥。至此,单方失去了同一个密钥,后续应用此密钥实现对称加密解密。
咱们晓得对称加密性能更好,但只有持有密钥,就能将劫持的密文解密,无奈解决被劫持的问题。非对称加密绝对更平安,但同时加密解密性能开销大。能够看出 HTTPS 在握手阶段应用了非对称加密,在后续的通信中应用了对称加密,既保证了安全性,又最大限度保障了性能。
HTTPS 压测的关注点
SSL 握手策略
HTTPS 在握手阶段有加密解密的过程,所以相比 HTTP 更耗费计算资源。压测引擎为了模仿海量用户执行申请,往往底层会在全局或线程维度,复用 TCP 连贯和 SSL 握手信息。这进步了施压机的性能,但对心愿每次循环模仿不同客户端行为的场景来说,施压机只模仿了足够的流量压力,并没有模仿足够的 SSL 握手计算压力,可能造成压力模仿不够精确的问题,如下图所示:
因而,在 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 握手策略
对于 HTTPS 压测,在串联链路每次循环时,须要抉择是否重置 SSL 连贯状态。如果抉择重置,在串联链路每一次循环执行时,会从新初始化 SSL 状态,这样能够更精确模仿每次循环代表不同用户的压测场景,同时会对施压机带来肯定的性能开销。
应用场景
- 场景一:HTTPS 压测,心愿模仿 100 个用户登录,同时放弃这 100 个用户一直反复拜访零碎。此时串联链路每次循环执行,模仿的是同一个虚构用户的行为。应将此开关置为“否”,而后设置并发数为 100。
- 场景二:HTTPS 压测,心愿模仿 5 分钟内,每个时刻都有 100 个不同用户对系统拜访。此时串联链路每次循环执行,模仿的是不同虚构用户的行为。为了保障压力模仿真实性,应将此开关置为“是”,而后设置并发数为 100。同时因为关上此开关后,施压机有额定的性能开销,倡议扩大施压机 IP 数。
设置 SSL 协定版本
这里列出一些罕用浏览器对 SSL 版本的反对状况供您参考:
能够看出,支流浏览器在 2018~2020 年前后都反对了 TLSv1.3。因而,如果您的压测场景模仿的客户端较新,建议您抉择 TLSv1.3 作为 SSL 版本;相同,如果您的压测场景须要模仿旧版本的浏览器客户端,建议您抉择 TLSv1.2 作为 SSL 版本。
如何录制 HTTPS 流量
各压测工具都提供了基于代理的流量录制工具,不便录制下客户端的流量,并疾速构建压测脚本。对于 HTTPS 协定的录制,除了配置代理,还须要信赖证书,操作比较复杂。
PTS 提供了免配置证书的录制计划:浏览器插件,反对疾速录制 HTTPS 流量,解密并转换为 PTS 压测场景,同时反对导出为 JMeter 脚本,欢送下载 [4 ] 应用,具体操作可参考文档 [5 ]。
同时针对挪动流量录制,PTS 提供了云真机和本地设施 2 种计划。其中云真机已预置 PTS 代理配置,反对在浏览器操作手机,录制流量,无需配置代理和证书,具体操作可参考文档 [6 ]。
总结
综上,本文次要论述了:
- 什么是 HTTPS
- HTTPS 压测中的留神点
- 如何用 PTS 做 HTTPS 压测
更多交换,欢送进钉钉群沟通,PTS 用户交换群号:11774967
同时,PTS 全新售卖形式来袭,根底版价格直降 50%!百万并发价格只需 6200!更有新用户 0.99 体验版、VPC 压测专属版,欢送大家选购!
参考文档
[1] JMeter(官网文档):
https://jmeter.apache.org/use…
[2] Gatling(官网文档):
https://gatling.io/docs/gatli…
[3] K6:
https://k6.io/docs/using-k6/o…
[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/docum…
[6] 文档(PTS 录制器应用文档—Android 手机端场景):
https://help.aliyun.com/docum…
[7] PTS HTTPS 设置文档:
https://help.aliyun.com/docum…
点击 此处,返回性能测试 PTS 官网页面理解更多!