你不知道的https压测

阿里云云栖号 阿里云云栖号     2023-03-11     782

关键词:

简介:随着互联网安全规范的普及,使用 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 通信,具体如图:

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(官方文档):

Apache JMeter - User's Manual: Component Reference

[2] Gatling(官方文档):

Gatling - SSL

[3] K6:

Options

[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 浏览器场景):

录制Chrome浏览器场景 - 性能测试 PTS - 阿里云

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

录制Android手机端场景 - 性能测试 PTS - 阿里云

[7] PTS HTTPS设置文档:

高级设置 - 性能测试 PTS - 阿里云

原文链接

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

你不知道的http之https

确保web安全的HTTPS  HTTPS=HTTP+加密+认证+完整性保护  1、加密:    1)通信的加密      所谓互联网,是由能连通到全世界的网络组成的。无论世界哪个角落的服务器在和客户端通信时,      在此通信线... 查看详情

你不知道的chrome

这篇博客不好写,直接上几个链接,都是有图有真相的好文关于console面板:https://zhuanlan.zhihu.com/p/29879682 看了才知道原来不止console.log()关于Chrome的Timeing:https://blog.csdn.net/itpinpai/article/details/52574385  Timing在networ 查看详情

《你不知道的javascript》系列分享专栏

《你不知道的JavaScript》系列分享专栏你不知道的JavaScript”系列就是要让不求甚解的JavaScript开发者迎难而上,深入语言内部,弄清楚JavaScript每一个零部件的用途《你不知道的JavaScript》已整理成PDF文档,点击可直接下载至本地查... 查看详情

你不知道的jmeter,锦上添花

1.我们在做压测的时候会一次发送好几百个请求,虽然在察看结果树中可以查看请求的结果,但是几百个请求一个个点开查看肯定不靠谱,下面我们就来介绍如何用响应断言给返回值加判断及如何解读2.我们正常测试项目时会有... 查看详情

神器来袭——不是你不想要(职场必备),而是你不知道

技能|给大家推荐一些实用的网站神器一:PDF、Word在线各种转https://smallpdf.com/cnhttp://www.ilovepdf.com/https://convertio.co/zh/http://cn.office-converter.com/1.https://smallpdf.com/cn 在线处理PDF:格式转换、压缩、合并/分割、解密,解決各种PDF问... 查看详情

jmeter接口进阶篇:你不知道的jmeter用法

最近,遇到了一个困扰很多人的问题。情景如下:业务流程:登录一个网站,反复进行充值。通常的做法是使用jmeter对登录和充值的接口进行反复的执行:但是实现的方法却不能完美的贴合业务流程。并且ÿ... 查看详情

《你不知道的javascript》——this和对象原型

 《你不知道的javascript》【3】——this和对象原型https://www.bilibili.com/video/BV1iE411P7UP 浅显的总结《你不知道的js》this指向          右查找的副作用:查找到顶层都找不到,就会抛出 查看详情

《你不知道的javascript》——闭包(代码片段)

第一部分还有最后的闭包没有讲...:1.非常浅显的阅读《你不知道的JavaScript》第一部分作用域与闭包https://www.bilibili.com/video/BV1jE411j7PU 从22分钟开始讲闭包              &nb 查看详情

你不知道的foreach(javascript)(代码片段)

Thinking系列,旨在利用10分钟的时间传达一种可落地的编程思想或解决方案。Array.prototype.forEach(callbackfn[,thisArg])规范地址(下述引用文,均源自该规范):https://tc39.es/ecma262/#sec-array.prototype.foreach跳过不存在的元... 查看详情

js局部变量和全局变量·你不知道的事

...明就可以使用变量;第二,js有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性。650)this.width=650;"src="https://s 查看详情

电子书关于区块链,你不知道的事

你一定听说过区块链?但却并不了解它的内涵。通过阅读电子书《什么是区块链》,你将了解数据软件和系统的发展历程、区块链作为分布式公共数据管理系统具有哪些特点、区块链名字的由来、以及比特币与区块链的... 查看详情

电子书关于区块链,你不知道的事

你一定听说过区块链?但却并不了解它的内涵。通过阅读电子书《什么是区块链》,你将了解数据软件和系统的发展历程、区块链作为分布式公共数据管理系统具有哪些特点、区块链名字的由来、以及比特币与区块链的... 查看详情

别天天看看直播了,你知道如何用jmeter对直播间做压测吗

01安装插件Jmeter本身是支持HTTP方法,要测试WebSocket的接口,首先要安装插件。安装插件的方法:1、首先下载插件管理器访问网站:https://jmeter-plugins.org/install/Install/下载jmeter-plugins-manager-1.3.jar包将下载的包放到jmete... 查看详情

生产环境压测

...N博客https://blog.csdn.net/shog808/article/details/79162871基于Dubbo的压测调优实例-简书https://www.jianshu.com/p/69398d2bdf2e记一次生产环境性能压测优化的经历-Guo_guo-CSDN博客https://blog.csdn.net/sszgg2006/article/details/78503369一次简单的压力测试实例-老_... 查看详情

当你不知道一个变量类型的完整定义时可以采取的操作(代码片段)

参考来源:https://stackoverflow.com/questions/9073667/where-to-find-the-complete-definition-of-off-t-type在Linux下编程时,或者说在一个有很多头文件互相include的场景中,经常会遇到不清楚一个变量的完整类型定义的情况(因为有用typedef封装),从... 查看详情

常用的jmeter参数化技巧总结,总有一个你不知道

说起接口测试,相信大家在工作中用的最多的还是Jmeter。JMeter是一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA等多种协... 查看详情

《你不知道的javascript[中卷]》14——asynquence附录

 《你不知道的JavaScript[中卷]》【14】——asynquence附录 查看详情

gpt4.0你知道的和你不知道的?

GPT4.0人工智能聊天机器人介绍GPT4.0之前,先给大家介绍一下整理的一个类ChatGPT相关的工具,有可以总结论文的、微软作图的、反ChatGPT检测的、数据标注的等等工具,感兴趣的小伙伴可以访问:github链接言归正传... 查看详情