一、淺談HTTPS
我們都知道HTTP并非是安全傳輸,在HTTPS基礎(chǔ)上使用SSL協(xié)議進(jìn)行加密構(gòu)成的HTTPS協(xié)議是相對安全的。目前越來越多的企業(yè)選擇使用HTTPS協(xié)議與用戶進(jìn)行通信,如百度、谷歌等。HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息。網(wǎng)上有諸多資料,有些寫得過于晦澀難懂,尤其是需要密碼學(xué)的一些知識。我做了一下簡單的整理,刨除復(fù)雜的底層實(shí)現(xiàn),單從理解SSL協(xié)議的角度宏觀上認(rèn)識一下HTTPS。一言以弊之,HTTPS是通過一次非對稱加密算法(如RSA算法)進(jìn)行了協(xié)商密鑰的生成與交換,然后在后續(xù)通信過程中就使用協(xié)商密鑰進(jìn)行對稱加密通信。HTTPS協(xié)議傳輸?shù)脑砗瓦^程簡圖如下所示:
一共有8個步驟,我們針對每一步,具體看看發(fā)生了什么事:
第一步,客戶端發(fā)起明文請求:將自己支持的一套加密規(guī)則、以及一個隨機(jī)數(shù)(Random_C)發(fā)送給服務(wù)器。
第二步,服務(wù)器初步響應(yīng):服務(wù)器根據(jù)自己支持的加密規(guī)則,從客戶端發(fā)來的請求中選出一組加密算法與HASH算法,生成隨機(jī)數(shù),并將自己的身份信息以證書(CA)的形式發(fā)回給瀏覽器。CA證書里面包含了服務(wù)器地址,加密公鑰,以及證書的頒發(fā)機(jī)構(gòu)等信息。這時服務(wù)器給客戶端的包括選擇使用的加密規(guī)則、CA證書、一個隨機(jī)數(shù)(Random_S)。
第三步,客戶端接到服務(wù)器的初步響應(yīng)后做四件事情:
(1)證書校驗(yàn): 驗(yàn)證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法,證書中包含的網(wǎng)站地址是否與正在訪問的地址一致等)。
(2)生成密碼:瀏覽器會生成一串隨機(jī)數(shù)的密碼(Pre_master),并用CA證書里的公鑰加密(enc_pre_master),用于傳給服務(wù)器。
(3)計算協(xié)商密鑰:
此時客戶端已經(jīng)獲取全部的計算協(xié)商密鑰需要的信息:兩個明文隨機(jī)數(shù) Random_C 和 Random_S 與自己計算產(chǎn)生的 Pre-master,計算得到協(xié)商密鑰enc_key。
enc_key=Fuc(random_C, random_S, Pre-Master)
(4)生成握手信息:使用約定好的HASH計算握手消息,并使用協(xié)商密鑰enc_key及約定好的算法對消息進(jìn)行加密。
第四步,客戶端將第三步產(chǎn)生的數(shù)據(jù)發(fā)給服務(wù)器:
這里要發(fā)送的數(shù)據(jù)有三條:
(1)用公鑰加密過的服務(wù)器隨機(jī)數(shù)密碼enc_pre_master
(2)客戶端發(fā)給服務(wù)器的通知,”以后我們都要用約定好的算法和協(xié)商密鑰進(jìn)行通信的哦”。
(3)客戶端加密生成的握手信息。
第五步,服務(wù)器接收客戶端發(fā)來的數(shù)據(jù)要做以下四件事情:(1)私鑰解密:使用自己的私鑰從接收到的enc_pre_master中解密取出密碼Pre_master。
(2)計算協(xié)商密鑰:此時服務(wù)器已經(jīng)獲取全部的計算協(xié)商密鑰需要的信息:兩個明文隨機(jī)數(shù) Random_C 和 Random_S 與Pre-master,計算得到協(xié)商密鑰enc_key。
enc_key=Fuc(random_C, random_S, Pre-Master)
(3)解密握手消息:使用協(xié)商密鑰enc_key解密客戶端發(fā)來的握手消息,并驗(yàn)證HASH是否與客戶端發(fā)來的一致。
(4)生成握手消息使用協(xié)商密鑰enc_key及約定好的算法加密一段握手消息,發(fā)送給客戶端。
第六步,服務(wù)器將第五步產(chǎn)生的數(shù)據(jù)發(fā)給客戶端:
這里要發(fā)的數(shù)據(jù)有兩條:
(1)服務(wù)器發(fā)給客戶端的通知,”聽你的,以后我們就用約定好的算法和協(xié)商密鑰進(jìn)行通信哦“。
(2)服務(wù)器加密生成的握手信息。
第七步,客戶端拿到握手信息解密,握手結(jié)束。
客戶端解密并計算握手消息的HASH,如果與服務(wù)端發(fā)來的HASH一致,此時握手過程結(jié)束。
第八步,正常加密通信
握手成功之后,所有的通信數(shù)據(jù)將由之前協(xié)商密鑰enc_key及約定好的算法進(jìn)行加密解密。
這里客戶端與服務(wù)器互相發(fā)送加密的握手消息并驗(yàn)證,目的是為了保證雙方都獲得了一致的密碼,并且可以正常的加密解密數(shù)據(jù),為后續(xù)真正數(shù)據(jù)的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH算法如下:非對稱加密算法:RSA,DSA/DSS對稱加密算法:AES,RC4,3DESHASH算法:MD5,SHA1,SHA256其中非對稱加密算法用于在握手過程中加密生成的密碼,對稱加密算法用于對真正傳輸?shù)臄?shù)據(jù)進(jìn)行加密,而HASH算法用于驗(yàn)證數(shù)據(jù)的完整性。由于瀏覽器生成的密碼是整個數(shù)據(jù)加密的關(guān)鍵,因此在傳輸?shù)臅r候使用了非對稱加密算法對其加密。非對稱加密算法會生成公鑰和私鑰,公鑰只能用于加密數(shù)據(jù),因此可以隨意傳輸,而服務(wù)器的私鑰用于對數(shù)據(jù)進(jìn)行解密,所以服務(wù)器都會非常小心的保管自己的私鑰,防止泄漏。
二、Fiddler抓取HTTPS協(xié)議原理
我們都知道,F(xiàn)iddler是個很好的代理工具,可抓取協(xié)議請求用于調(diào)試。關(guān)于Fiddler抓取HTTP協(xié)議的原理和配置比較簡單,對Fiddler和客戶端稍作配置,便能使得Fiddler輕易地獲取HTTP請求。但是由于HTTPS協(xié)議的特殊性,要進(jìn)一步地配置Fiddler,我們首先要了解一下fiddler抓取HTTPS協(xié)議的原理才能更好地理解如何對fiddler進(jìn)行配置。Fiddler本身就是一個協(xié)議代理工具,在上一節(jié)HTTPS原理圖上,客戶端與服務(wù)器端進(jìn)行通信的過程全部都由Fiddler獲取到,也就是如下圖所示:
我們看到Fiddler抓取HTTPS協(xié)議主要由以下幾步進(jìn)行:
第一步,F(xiàn)iddler截獲客戶端發(fā)送給服務(wù)器的HTTPS請求,F(xiàn)iddler偽裝成客戶端向服務(wù)器發(fā)送請求進(jìn)行握手 。
第二步,服務(wù)器發(fā)回相應(yīng),F(xiàn)iddler獲取到服務(wù)器的CA證書, 用根證書公鑰進(jìn)行解密, 驗(yàn)證服務(wù)器數(shù)據(jù)簽名, 獲取到服務(wù)器CA證書公鑰。然后Fiddler偽造自己的CA證書, 冒充服務(wù)器證書傳遞給客戶端瀏覽器。
第三步,與普通過程中客戶端的操作相同,客戶端根據(jù)返回的數(shù)據(jù)進(jìn)行證書校驗(yàn)、生成密碼Pre_master、用Fiddler偽造的證書公鑰加密,并生成HTTPS通信用的對稱密鑰enc_key。
第四步,客戶端將重要信息傳遞給服務(wù)器, 又被Fiddler截獲。Fiddler將截獲的密文用自己偽造證書的私鑰解開, 獲得并計算得到HTTPS通信用的對稱密鑰enc_key。Fiddler將對稱密鑰用服務(wù)器證書公鑰加密傳遞給服務(wù)器。
第五步,與普通過程中服務(wù)器端的操作相同,服務(wù)器用私鑰解開后建立信任,然后再發(fā)送加密的握手消息給客戶端。
第六步,F(xiàn)iddler截獲服務(wù)器發(fā)送的密文, 用對稱密鑰解開, 再用自己偽造證書的私鑰加密傳給客戶端。
第七步,客戶端拿到加密信息后,用公鑰解開,驗(yàn)證HASH。握手過程正式完成,客戶端與服務(wù)器端就這樣建立了”信任“。
在之后的正常加密通信過程中,F(xiàn)iddler如何在服務(wù)器與客戶端之間充當(dāng)?shù)谌吣兀?/p>
服務(wù)器—>客戶端:Fiddler接收到服務(wù)器發(fā)送的密文, 用對稱密鑰解開, 獲得服務(wù)器發(fā)送的明文。再次加密, 發(fā)送給客戶端。
客戶端—>服務(wù)端:客戶端用對稱密鑰加密,被Fiddler截獲后,解密獲得明文。再次加密,發(fā)送給服務(wù)器端。由于Fiddler一直擁有通信用對稱密鑰enc_key, 所以在整個HTTPS通信過程中信息對其透明。
從上面可以看到,F(xiàn)iddler抓取HTTPS協(xié)議成功的關(guān)鍵是根證書(具體是什么,可Google),這是一個信任鏈的起點(diǎn),這也是Fiddler偽造的CA證書能夠獲得客戶端和服務(wù)器端信任的關(guān)鍵。
接下來我們就來看如果設(shè)置讓Fiddler抓取HTTPS協(xié)議。
三、Fiddler抓取HTTPS設(shè)置
注意以下操作的前提是,手機(jī)已經(jīng)能夠連上Fiddler,這部分的配置過程簡單就不贅述了,可參考:手機(jī)如何連接Fiddler?。
如何繼續(xù)配置讓Fiddler抓取到HTTPS協(xié)議呢?
(一)首先對Fiddler進(jìn)行設(shè)置:打開工具欄->Tools->Fiddler Options->HTTPS
選中Capture HTTPS CONNECTs,因?yàn)槲覀円肍iddler獲取手機(jī)客戶端發(fā)出的HTTPS請求,所以中間的下拉菜單中選中from remote clients only。選中下方Ignore server certificate errors.(二)然后,就是手機(jī)安裝Fiddler證書。
這一步,也就是我們上面分析的抓取HTTPS請求的關(guān)鍵。
操作步驟很簡單,打開手機(jī)瀏覽器,在瀏覽器地址輸入代理服務(wù)器IP和端口,會看到一個Fiddler提供的頁面。
接著點(diǎn)擊最下方的FiddlerRoot certificate,這時候點(diǎn)擊確定安裝就可以下載Fiddler的證書了。
下載安裝完成好后,我們用手機(jī)客戶端或者瀏覽器發(fā)出HTTPS請求,F(xiàn)iddler就可以截獲到了,就跟截獲普通的HTTP請求一樣。
jmeter發(fā)送HTTPS請求
jmeter一般來說是壓力測試的利器,最近想嘗試jmeter和BeanShell進(jìn)行接口測試。由于在云閱讀接口測試的過程中需要進(jìn)行登錄操作,而登錄請求是HTTPS協(xié)議。這就需要對jmeter進(jìn)行設(shè)置。
(一)設(shè)置HTTP請求
我們首先右鍵添加線程組,然后繼續(xù)右鍵添加控制器,由于登陸操作只請求一次,因而選擇僅一次控制器。接下來右鍵添加sampler->HTTP請求,設(shè)置HTTP請求。這里注意的地方首先是端口號,如果只是普通的HTTP協(xié)議,默認(rèn)不填,而這里是HTTPS協(xié)議,因而填端口號443。另外“協(xié)議”這兒填“https”。請求體數(shù)據(jù),由于云閱讀登陸時的post數(shù)據(jù)是json結(jié)構(gòu)的,所以填在Body Data這里,用大括號將數(shù)據(jù)組織起來。PS:實(shí)際上應(yīng)該是post請求,截圖過快忘記改了~
(二)設(shè)置Jmeter代理
剛剛講了HTTPS協(xié)議和代理控制發(fā)送HTTPS請求的原理,我們知道要成功地發(fā)送HTTPS請求,關(guān)鍵之處就是代理的設(shè)置。首先我們要在線程組里添加一個錄制控制器,不然無法生成Jmeter的CA證書文件。然后在工作臺右鍵添加-〉非測試元件-〉HTTP代理服務(wù)器。選擇默認(rèn)端口是8080即可。直接點(diǎn)擊啟動。
點(diǎn)擊啟動后彈出頁面提示CA證書已經(jīng)生成,在Bin目錄下。點(diǎn)擊確定即可。
(三)開啟Jmeter代理
找到工具欄“選項(xiàng)”-〉SSL管理器。打開bin目錄下的ApacheJMeterTemporaryRootCA.crt即可。
(四)修改HTTP請求
現(xiàn)在已經(jīng)設(shè)置好代理,重新修改下已經(jīng)創(chuàng)建好的HTTP請求。再最下方Proxy server處添加代理服務(wù)器:localhost(本機(jī)上搭建的Jmeter代理),端口號就是8080。保存一下整個計劃就可以。
(五)添加HTTP請求頭
由于我的請求體數(shù)據(jù)是json類型的,而默認(rèn)HTTP請求頭的content-Type是application/x-www-form-urlencoded。所以我們要在HTTP請求基礎(chǔ)上添加一個HTTP請求頭,設(shè)置Content-Type為application/json類型。
(六)添加結(jié)果查看樹
在HTTP代理后添加-〉監(jiān)聽器-〉查看結(jié)果樹。
(七)執(zhí)行HTTPS請求,并查看結(jié)果
點(diǎn)擊工具欄的保存,然后點(diǎn)擊運(yùn)行按鈕,接下來就可以在結(jié)果樹中查看運(yùn)行結(jié)果。我們看到運(yùn)行成功,表示HTTPS請求成功!
最后感謝每一個認(rèn)真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
軟件測試面試小程序
被百萬人刷爆的軟件測試題庫?。?!誰用誰知道?。?!全網(wǎng)最全面試刷題小程序,手機(jī)就可以刷題,地鐵上公交上,卷起來!
涵蓋以下這些面試題板塊:
1、軟件測試基礎(chǔ)理論 ,2、web,app,接口功能測試 ,3、網(wǎng)絡(luò) ,4、數(shù)據(jù)庫?,5、linux
6、web,app,接口自動化 ,7、性能測試?,8、編程基礎(chǔ),9、hr面試題 ,10、開放性測試題,11、安全測試,12、計算機(jī)基礎(chǔ)
文章來源:http://www.zghlxwxcb.cn/news/detail-700949.html
這些資料,對于【軟件測試】的朋友來說應(yīng)該是最全面最完整的備戰(zhàn)倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!? ?文章來源地址http://www.zghlxwxcb.cn/news/detail-700949.html
到了這里,關(guān)于HTTPS 之fiddler抓包--jmeter請求的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!