你不知道的 HTTPS 壓測

阿里巴巴雲原生 發表於 2022-05-17

作者:拂衣

引言

隨著網際網路安全規範的普及,使用 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 通訊,具體如圖:

 title=

HTTPS 通過 SSL 層的加密,可以防止網站被篡改和劫持。下面我們簡單看下 HTTPS 是如何進行加密解密的:

首先客戶端和服務端會協商加密演算法和協議版本。協商結束後,服務端傳送公鑰給客戶端,客戶端拿到公鑰後,生成一個隨機密碼串(Pre-master secret),並通過公鑰加密返回給服務端。服務端使用私鑰解密密文後,得到此隨機密碼串(Pre-master secret),之後通過協商的隨機數和加密演算法,生成對稱加密金鑰。至此,雙方得到了同一個金鑰,後續使用此金鑰實現對稱加密解密。

 title=

我們知道對稱加密效能更好,但只要持有金鑰,就能將劫持的密文解密,無法解決被劫持的問題。非對稱加密相對更安全,但同時加密解密效能開銷大。可以看出 HTTPS 在握手階段使用了非對稱加密,在後續的通訊中使用了對稱加密,既保證了安全性,又最大限度保證了效能。

HTTPS 壓測的關注點

SSL 握手策略

HTTPS 在握手階段有加密解密的過程,所以相比 HTTP 更消耗計算資源。壓測引擎為了模擬海量使用者執行請求,往往底層會在全域性或執行緒維度,複用 TCP 連線和 SSL 握手資訊。這提高了施壓機的效能,但對希望每次迴圈模擬不同客戶端行為的場景來說,施壓機只模擬了足夠的流量壓力,並沒有模擬足夠的 SSL 握手計算壓力,可能造成壓力模擬不夠準確的問題,如下圖所示:

 title=

因此,在 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 握手策略

 title=

對於 HTTPS 壓測,在串聯鏈路每次迴圈時,需要選擇是否重置 SSL 連線狀態。如果選擇重置,在串聯鏈路每一次迴圈執行時,會重新初始化 SSL 狀態,這樣可以更準確模擬每次迴圈代表不同使用者的壓測場景,同時會對施壓機帶來一定的效能開銷。

使用場景

  • 場景一:HTTPS 壓測,希望模擬 100 個使用者登入,同時保持這 100 個使用者不斷重複訪問系統。此時串聯鏈路每次迴圈執行,模擬的是同一個虛擬使用者的行為。應將此開關置為“否”,然後設定併發數為 100。
  • 場景二:HTTPS 壓測,希望模擬 5 分鐘內,每個時刻都有 100 個不同使用者對系統訪問。此時串聯鏈路每次迴圈執行,模擬的是不同虛擬使用者的行為。為了保證壓力模擬真實性,應將此開關置為“是”,然後設定併發數為 100。同時因為開啟此開關後,施壓機有額外的效能開銷,建議擴充套件施壓機IP數。

設定 SSL 協議版本

這裡列出一些常用瀏覽器對 SSL 版本的支援情況供您參考:

 title=

可以看出,主流瀏覽器在 2018~2020 年前後都支援了 TLSv1.3。因此,如果您的壓測場景模擬的客戶端較新,建議您選擇 TLSv1.3 作為 SSL 版本;相反,如果您的壓測場景需要模擬舊版本的瀏覽器客戶端,建議您選擇 TLSv1.2 作為 SSL 版本。

如何錄製 HTTPS 流量

各壓測工具都提供了基於代理的流量錄製工具,方便錄製下客戶端的流量,並快速構建壓測指令碼。對於 HTTPS 協議的錄製,除了配置代理,還需要信任證書,操作比較複雜。

PTS 提供了免配置證書的錄製方案:瀏覽器外掛,支援快速錄製 HTTPS 流量,解密並轉換為 PTS 壓測場景,同時支援匯出為 JMeter 指令碼,歡迎下載 [4 ] 使用,詳細操作可參考文件 [5 ]

 title=

同時針對移動流量錄製,PTS 提供了雲真機和本地裝置 2 種方案。其中雲真機已預置 PTS 代理配置,支援在瀏覽器操作手機,錄製流量,無需配置代理和證書,詳細操作可參考文件 [6 ]

 title=

總結

綜上,本文主要闡述了:

  • 什麼是 HTTPS
  • HTTPS 壓測中的注意點
  • 如何用 PTS 做 HTTPS 壓測

更多交流,歡迎進釘釘群溝通,PTS 使用者交流群號:11774967

同時,PTS 全新售賣方式來襲,基礎版價格直降 50%!百萬併發價格只需 6200!更有新使用者 0.99 體驗版、VPC 壓測專屬版,歡迎大家選購!

 title=

參考文件

[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 官網頁面瞭解更多!