轉載 HTTPS 之fiddler抓包、jmeter請求

轉載自 http://suixiang0923.github.io/2016/01/12/%E6%B5%85%E8%B0%88HTTPS%E4%BB%A5%E5%8F%8AFiddler%E6%8A%93%E5%8F%96HTTPS%E5%8D%8F%E8%AE%AE/html

1、淺談HTTPS

咱們都知道HTTP並不是是安全傳輸,在HTTPS基礎上使用SSL協議進行加密構成的HTTPS協議是相對安全的。目前愈來愈多的企業選擇使用HTTPS協議與用戶進行通訊,如百度、谷歌等。HTTPS在傳輸數據以前須要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程當中將確立雙方加密傳輸數據的密碼信息。網上有諸多資料,有些寫得過於晦澀難懂,尤爲是須要密碼學的一些知識。我作了一下簡單的整理,刨除複雜的底層實現,單從理解SSL協議的角度宏觀上認識一下HTTPS。一言以弊之,HTTPS是經過一次非對稱加密算法(如RSA算法)進行了協商密鑰的生成與交換,而後在後續通訊過程當中就使用協商密鑰進行對稱加密通訊。HTTPS協議傳輸的原理和過程簡圖以下所示:

HTTPS協議傳輸原理
一共有8個步驟,咱們針對每一步,具體看看發生了什麼事:git

  1. 第一步,客戶端發起明文請求:將本身支持的一套加密規則、以及一個隨機數(Random_C)發送給服務器。
  2. 第二步,服務器初步響應:服務器根據本身支持的加密規則,從客戶端發來的請求中選出一組加密算法與HASH算法,生成隨機數,並將本身的身份信息以證書(CA)的形式發回給瀏覽器。CA證書裏面包含了服務器地址,加密公鑰,以及證書的頒發機構等信息。這時服務器給客戶端的包括選擇使用的加密規則、CA證書、一個隨機數(Random_S)。
  3. 第三步,客戶端接到服務器的初步響應後作四件事情:
    (1)證書校驗: 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等)。
    (2)生成密碼:瀏覽器會生成一串隨機數的密碼(Pre_master),並用CA證書裏的公鑰加密(enc_pre_master),用於傳給服務器。
    (3)計算協商密鑰:
    此時客戶端已經獲取所有的計算協商密鑰須要的信息:兩個明文隨機數 Random_C 和 Random_S 與本身計算產生的 Pre-master,計算獲得協商密鑰enc_key。
    enc_key=Fuc(random_C, random_S, Pre-Master)
    (4)生成握手信息:使用約定好的HASH計算握手消息,並使用協商密鑰enc_key及約定好的算法對消息進行加密。
  4. 第四步,客戶端將第三步產生的數據發給服務器:
    這裏要發送的數據有三條:
    (1)用公鑰加密過的服務器隨機數密碼enc_pre_master
    (2)客戶端發給服務器的通知,」之後咱們都要用約定好的算法和協商密鑰進行通訊的哦」。
    (3)客戶端加密生成的握手信息。
  5. 第五步,服務器接收客戶端發來的數據要作如下四件事情:(1)私鑰解密:使用本身的私鑰從接收到的enc_pre_master中解密取出密碼Pre_master。
    (2)計算協商密鑰:此時服務器已經獲取所有的計算協商密鑰須要的信息:兩個明文隨機數 Random_C 和 Random_S 與Pre-master,計算獲得協商密鑰enc_key。
    enc_key=Fuc(random_C, random_S, Pre-Master)
    (3)解密握手消息:使用協商密鑰enc_key解密客戶端發來的握手消息,並驗證HASH是否與客戶端發來的一致。
    (4)生成握手消息使用協商密鑰enc_key及約定好的算法加密一段握手消息,發送給客戶端。
  6. 第六步,服務器將第五步產生的數據發給客戶端:
    這裏要發的數據有兩條:
    (1)服務器發給客戶端的通知,」聽你的,之後咱們就用約定好的算法和協商密鑰進行通訊哦「。
    (2)服務器加密生成的握手信息。
  7. 第七步,客戶端拿到握手信息解密,握手結束。
    客戶端解密並計算握手消息的HASH,若是與服務端發來的HASH一致,此時握手過程結束。
  8. 第八步,正常加密通訊
    握手成功以後,全部的通訊數據將由以前協商密鑰enc_key及約定好的算法進行加密解密。

這裏客戶端與服務器互相發送加密的握手消息並驗證,目的是爲了保證雙方都得到了一致的密碼,而且能夠正常的加密解密數據,爲後續真正數據的傳輸作一次測試。另外,HTTPS通常使用的加密與HASH算法以下:非對稱加密算法:RSA,DSA/DSS對稱加密算法:AES,RC4,3DESHASH算法:MD5,SHA1,SHA256其中非對稱加密算法用於在握手過程當中加密生成的密碼,對稱加密算法用於對真正傳輸的數據進行加密,而HASH算法用於驗證數據的完整性。因爲瀏覽器生成的密碼是整個數據加密的關鍵,所以在傳輸的時候使用了非對稱加密算法對其加密。非對稱加密算法會生成公鑰和私鑰,公鑰只能用於加密數據,所以能夠隨意傳輸,而服務器的私鑰用於對數據進行解密,因此服務器都會很是當心的保管本身的私鑰,防止泄漏。github

2、Fiddler抓取HTTPS協議原理

咱們都知道,Fiddler是個很好的代理工具,可抓取協議請求用於調試。關於Fiddler抓取HTTP協議的原理和配置比較簡單,對Fiddler和客戶端稍做配置,便能使得Fiddler輕易地獲取HTTP請求。可是因爲HTTPS協議的特殊性,要進一步地配置Fiddler,咱們首先要了解一下fiddler抓取HTTPS協議的原理才能更好地理解如何對fiddler進行配置。Fiddler自己就是一個協議代理工具,在上一節HTTPS原理圖上,客戶端與服務器端進行通訊的過程所有都由Fiddler獲取到,也就是以下圖所示:
Fiddler抓取HTTPS協議原理圖
咱們看到Fiddler抓取HTTPS協議主要由如下幾步進行:算法

  1. 第一步,Fiddler截獲客戶端發送給服務器的HTTPS請求,Fiddler假裝成客戶端向服務器發送請求進行握手 。
  2. 第二步,服務器發回相應,Fiddler獲取到服務器的CA證書, 用根證書公鑰進行解密, 驗證服務器數據簽名, 獲取到服務器CA證書公鑰。而後Fiddler僞造本身的CA證書, 冒充服務器證書傳遞給客戶端瀏覽器。
  3. 第三步,與普經過程中客戶端的操做相同,客戶端根據返回的數據進行證書校驗、生成密碼Pre_master、用Fiddler僞造的證書公鑰加密,並生成HTTPS通訊用的對稱密鑰enc_key。
  4. 第四步,客戶端將重要信息傳遞給服務器, 又被Fiddler截獲。Fiddler將截獲的密文用本身僞造證書的私鑰解開, 得到並計算獲得HTTPS通訊用的對稱密鑰enc_key。Fiddler將對稱密鑰用服務器證書公鑰加密傳遞給服務器。
  5. 第五步,與普經過程中服務器端的操做相同,服務器用私鑰解開後創建信任,而後再發送加密的握手消息給客戶端。
  6. 第六步,Fiddler截獲服務器發送的密文, 用對稱密鑰解開, 再用本身僞造證書的私鑰加密傳給客戶端。
  7. 第七步,客戶端拿到加密信息後,用公鑰解開,驗證HASH。握手過程正式完成,客戶端與服務器端就這樣創建了」信任「。

在以後的正常加密通訊過程當中,Fiddler如何在服務器與客戶端之間充當第三者呢?json

服務器—>客戶端:Fiddler接收到服務器發送的密文, 用對稱密鑰解開, 得到服務器發送的明文。再次加密, 發送給客戶端。
客戶端—>服務端:客戶端用對稱密鑰加密,被Fiddler截獲後,解密得到明文。再次加密,發送給服務器端。因爲Fiddler一直擁有通訊用對稱密鑰enc_key, 因此在整個HTTPS通訊過程當中信息對其透明。瀏覽器

從上面能夠看到,Fiddler抓取HTTPS協議成功的關鍵是根證書(具體是什麼,可Google),這是一個信任鏈的起點,這也是Fiddler僞造的CA證書可以得到客戶端和服務器端信任的關鍵。
接下來咱們就來看若是設置讓Fiddler抓取HTTPS協議。安全

3、Fiddler抓取HTTPS設置

注意如下操做的前提是,手機已經可以連上Fiddler,這部分的配置過程簡單就不贅述了,可參考:手機如何鏈接Fiddler 
如何繼續配置讓Fiddler抓取到HTTPS協議呢?
(一)首先對Fiddler進行設置:打開工具欄->Tools->Fiddler Options->HTTPS
對Fiddler進行設置
選中Capture HTTPS CONNECTs,由於咱們要用Fiddler獲取手機客戶端發出的HTTPS請求,因此中間的下拉菜單中選中from remote clients only。選中下方Ignore server certificate errors.
(二)而後,就是手機安裝Fiddler證書。
這一步,也就是咱們上面分析的抓取HTTPS請求的關鍵。
操做步驟很簡單,打開手機瀏覽器,在瀏覽器地址輸入代理服務器IP和端口,會看到一個Fiddler提供的頁面。

接着點擊最下方的FiddlerRoot certificate,這時候點擊肯定安裝就能夠下載Fiddler的證書了。
下載安裝完成好後,咱們用手機客戶端或者瀏覽器發出HTTPS請求,Fiddler就能夠截獲到了,就跟截獲普通的HTTP請求同樣。服務器

jmeter發送HTTPS請求

字數652 閱讀375 評論0 

jmeter通常來講是壓力測試的利器,最近想嘗試jmeter和BeanShell進行接口測試。因爲在雲閱讀接口測試的過程當中須要進行登陸操做,而登陸請求是HTTPS協議。這就須要對jmeter進行設置。app

(一)設置HTTP請求

咱們首先右鍵添加線程組,而後繼續右鍵添加控制器,因爲登錄操做只請求一次,於是選擇僅一次控制器。接下來右鍵添加sampler->HTTP請求,設置HTTP請求。這裏注意的地方首先是端口號,若是隻是普通的HTTP協議,默認不填,而這裏是HTTPS協議,於是填端口號443。另外「協議」這兒填「https」。請求體數據,因爲雲閱讀登錄時的post數據是json結構的,因此填在Body Data這裏,用大括號將數據組織起來。PS:實際上應該是post請求,截圖過快忘記改了~
<!--more-->dom

(二)設置Jmeter代理

上一篇博客剛剛講了HTTPS協議和代理控制發送HTTPS請求的原理,咱們知道要成功地發送HTTPS請求,關鍵之處就是代理的設置。首先咱們要在線程組裏添加一個錄製控制器,否則沒法生成Jmeter的CA證書文件。而後在工做臺右鍵添加-〉非測試元件-〉HTTP代理服務器。選擇默認端口是8080便可。直接點擊啓動。


點擊啓動後彈出頁面提示CA證書已經生成,在Bin目錄下。點擊肯定便可。

(三)開啓Jmeter代理

找到工具欄「選項」-〉SSL管理器。打開bin目錄下的ApacheJMeterTemporaryRootCA.crt便可。

(四)修改HTTP請求

如今已經設置好代理,從新修改下已經建立好的HTTP請求。再最下方Proxy server處添加代理服務器:localhost(本機上搭建的Jmeter代理),端口號就是8080。保存一下整個計劃就能夠。

(五)添加HTTP請求頭

因爲個人請求體數據是json類型的,而默認HTTP請求頭的content-Type是application/x-www-form-urlencoded。因此咱們要在HTTP請求基礎上添加一個HTTP請求頭,設置Content-Type爲application/json類型。

(六)添加結果查看樹

在HTTP代理後添加-〉監聽器-〉查看結果樹。

(七)執行HTTPS請求,並查看結果

點擊工具欄的保存,而後點擊運行按鈕,接下來就能夠在結果樹中查看運行結果。咱們看到運行成功,表示HTTPS請求成功!

相關文章
相關標籤/搜索