淺談HTTPS以及Fiddler抓取HTTPS協(xié)議

最近想嘗試基于Fiddler的錄制功能做一些接口的獲取和處理工作,碰到的一個(gè)問(wèn)題就是簡(jiǎn)單連接Fiddler只能抓取HTTP協(xié)議,關(guān)鍵的登錄請(qǐng)求等HTTPS協(xié)議都沒(méi)有捕捉到,所以想讓Fiddler能夠同時(shí)抓取到HTTPS和HTTP協(xié)議,設(shè)置只是很小的一步,關(guān)鍵是了解HTTPS協(xié)議的原理、Fiddler抓取HTTPS協(xié)議的原理,然后才能更好的理解如何進(jìn)行設(shè)置。本文主要由三部分組成,第一部分用比較通俗形象的方式簡(jiǎn)述了HTTPS的原理,第二部分則是在第一部分的基礎(chǔ)上介紹Fiddler抓取HTTPS協(xié)議的原理,最后第三部分就是如何對(duì)Fiddler及手機(jī)進(jìn)行設(shè)置讓其捕捉HTTPS協(xié)議。

一、淺談HTTPS

我們都知道HTTP并非是安全傳輸,在HTTPS基礎(chǔ)上使用SSL協(xié)議進(jìn)行加密構(gòu)成的HTTPS協(xié)議是相對(duì)安全的。目前越來(lái)越多的企業(yè)選擇使用HTTPS協(xié)議與用戶進(jìn)行通信,如百度、谷歌等。HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過(guò)程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息。網(wǎng)上有諸多資料,有些寫(xiě)得過(guò)于晦澀難懂,尤其是需要密碼學(xué)的一些知識(shí)。我做了一下簡(jiǎn)單的整理,刨除復(fù)雜的底層實(shí)現(xiàn),單從理解SSL協(xié)議的角度宏觀上認(rèn)識(shí)一下HTTPS。一言以弊之,HTTPS是通過(guò)一次非對(duì)稱加密算法(如RSA算法)進(jìn)行了協(xié)商密鑰的生成與交換,然后在后續(xù)通信過(guò)程中就使用協(xié)商密鑰進(jìn)行對(duì)稱加密通信。HTTPS協(xié)議傳輸?shù)脑砗瓦^(guò)程簡(jiǎn)圖如下所示:

HTTPS協(xié)議傳輸原理

一共有8個(gè)步驟,我們針對(duì)每一步,具體看看發(fā)生了什么事:

  1. 第一步,客戶端發(fā)起明文請(qǐng)求:將自己支持的一套加密規(guī)則、以及一個(gè)隨機(jī)數(shù)(Random_C)發(fā)送給服務(wù)器。
  2. 第二步,服務(wù)器初步響應(yīng):服務(wù)器根據(jù)自己支持的加密規(guī)則,從客戶端發(fā)來(lái)的請(qǐng)求中選出一組加密算法與HASH算法,生成隨機(jī)數(shù),并將自己的身份信息以證書(shū)(CA)的形式發(fā)回給瀏覽器。CA證書(shū)里面包含了服務(wù)器地址,加密公鑰,以及證書(shū)的頒發(fā)機(jī)構(gòu)等信息。這時(shí)服務(wù)器給客戶端的包括選擇使用的加密規(guī)則、CA證書(shū)、一個(gè)隨機(jī)數(shù)(Random_S)。
  3. 第三步,客戶端接到服務(wù)器的初步響應(yīng)后做四件事情:
    (1)證書(shū)校驗(yàn): 驗(yàn)證證書(shū)的合法性(頒發(fā)證書(shū)的機(jī)構(gòu)是否合法,證書(shū)中包含的網(wǎng)站地址是否與正在訪問(wèn)的地址一致等)。
    (2)生成密碼:瀏覽器會(huì)生成一串隨機(jī)數(shù)的密碼(Pre_master),并用CA證書(shū)里的公鑰加密(enc_pre_master),用于傳給服務(wù)器。
    (3)計(jì)算協(xié)商密鑰:
    此時(shí)客戶端已經(jīng)獲取全部的計(jì)算協(xié)商密鑰需要的信息:兩個(gè)明文隨機(jī)數(shù) Random_C 和 Random_S 與自己計(jì)算產(chǎn)生的 Pre-master,計(jì)算得到協(xié)商密鑰enc_key。
    enc_key=Fuc(random_C, random_S, Pre-Master)
    (4)生成握手信息:使用約定好的HASH計(jì)算握手消息,并使用協(xié)商密鑰enc_key及約定好的算法對(duì)消息進(jìn)行加密。
  4. 第四步,客戶端將第三步產(chǎn)生的數(shù)據(jù)發(fā)給服務(wù)器:
    這里要發(fā)送的數(shù)據(jù)有三條:
    (1)用公鑰加密過(guò)的服務(wù)器隨機(jī)數(shù)密碼enc_pre_master
    (2)客戶端發(fā)給服務(wù)器的通知,"以后我們都要用約定好的算法和協(xié)商密鑰進(jìn)行通信的哦"。
    (3)客戶端加密生成的握手信息。
  5. 第五步,服務(wù)器接收客戶端發(fā)來(lái)的數(shù)據(jù)要做以下四件事情:(1)私鑰解密:使用自己的私鑰從接收到的enc_pre_master中解密取出密碼Pre_master。
    (2)計(jì)算協(xié)商密鑰:此時(shí)服務(wù)器已經(jīng)獲取全部的計(jì)算協(xié)商密鑰需要的信息:兩個(gè)明文隨機(jī)數(shù) Random_C 和 Random_S 與Pre-master,計(jì)算得到協(xié)商密鑰enc_key。
    enc_key=Fuc(random_C, random_S, Pre-Master)
    (3)解密握手消息:使用協(xié)商密鑰enc_key解密客戶端發(fā)來(lái)的握手消息,并驗(yàn)證HASH是否與客戶端發(fā)來(lái)的一致。
    (4)生成握手消息使用協(xié)商密鑰enc_key及約定好的算法加密一段握手消息,發(fā)送給客戶端。
  6. 第六步,服務(wù)器將第五步產(chǎn)生的數(shù)據(jù)發(fā)給客戶端:
    這里要發(fā)的數(shù)據(jù)有兩條:
    (1)服務(wù)器發(fā)給客戶端的通知,”聽(tīng)你的,以后我們就用約定好的算法和協(xié)商密鑰進(jìn)行通信哦“。
    (2)服務(wù)器加密生成的握手信息。
  7. 第七步,客戶端拿到握手信息解密,握手結(jié)束。
    客戶端解密并計(jì)算握手消息的HASH,如果與服務(wù)端發(fā)來(lái)的HASH一致,此時(shí)握手過(guò)程結(jié)束。
  8. 第八步,正常加密通信
    握手成功之后,所有的通信數(shù)據(jù)將由之前協(xié)商密鑰enc_key及約定好的算法進(jìn)行加密解密。

這里客戶端與服務(wù)器互相發(fā)送加密的握手消息并驗(yàn)證,目的是為了保證雙方都獲得了一致的密碼,并且可以正常的加密解密數(shù)據(jù),為后續(xù)真正數(shù)據(jù)的傳輸做一次測(cè)試。另外,HTTPS一般使用的加密與HASH算法如下:非對(duì)稱加密算法:RSA,DSA/DSS對(duì)稱加密算法:AES,RC4,3DESHASH算法:MD5,SHA1,SHA256其中非對(duì)稱加密算法用于在握手過(guò)程中加密生成的密碼,對(duì)稱加密算法用于對(duì)真正傳輸?shù)臄?shù)據(jù)進(jìn)行加密,而HASH算法用于驗(yàn)證數(shù)據(jù)的完整性。由于瀏覽器生成的密碼是整個(gè)數(shù)據(jù)加密的關(guān)鍵,因此在傳輸?shù)臅r(shí)候使用了非對(duì)稱加密算法對(duì)其加密。非對(duì)稱加密算法會(huì)生成公鑰和私鑰,公鑰只能用于加密數(shù)據(jù),因此可以隨意傳輸,而服務(wù)器的私鑰用于對(duì)數(shù)據(jù)進(jìn)行解密,所以服務(wù)器都會(huì)非常小心的保管自己的私鑰,防止泄漏。

二、Fiddler抓取HTTPS協(xié)議原理

我們都知道,F(xiàn)iddler是個(gè)很好的代理工具,可抓取協(xié)議請(qǐng)求用于調(diào)試。關(guān)于Fiddler抓取HTTP協(xié)議的原理和配置比較簡(jiǎn)單,對(duì)Fiddler和客戶端稍作配置,便能使得Fiddler輕易地獲取HTTP請(qǐng)求。但是由于HTTPS協(xié)議的特殊性,要進(jìn)一步地配置Fiddler,我們首先要了解一下fiddler抓取HTTPS協(xié)議的原理才能更好地理解如何對(duì)fiddler進(jìn)行配置。Fiddler本身就是一個(gè)協(xié)議代理工具,在上一節(jié)HTTPS原理圖上,客戶端與服務(wù)器端進(jìn)行通信的過(guò)程全部都由Fiddler獲取到,也就是如下圖所示:


Fiddler抓取HTTPS協(xié)議原理圖

我們看到Fiddler抓取HTTPS協(xié)議主要由以下幾步進(jìn)行:

  1. 第一步,F(xiàn)iddler截獲客戶端發(fā)送給服務(wù)器的HTTPS請(qǐng)求,F(xiàn)iddler偽裝成客戶端向服務(wù)器發(fā)送請(qǐng)求進(jìn)行握手 。
  2. 第二步,服務(wù)器發(fā)回相應(yīng),F(xiàn)iddler獲取到服務(wù)器的CA證書(shū), 用根證書(shū)公鑰進(jìn)行解密, 驗(yàn)證服務(wù)器數(shù)據(jù)簽名, 獲取到服務(wù)器CA證書(shū)公鑰。然后Fiddler偽造自己的CA證書(shū), 冒充服務(wù)器證書(shū)傳遞給客戶端瀏覽器。
  3. 第三步,與普通過(guò)程中客戶端的操作相同,客戶端根據(jù)返回的數(shù)據(jù)進(jìn)行證書(shū)校驗(yàn)、生成密碼Pre_master、用Fiddler偽造的證書(shū)公鑰加密,并生成HTTPS通信用的對(duì)稱密鑰enc_key。
  4. 第四步,客戶端將重要信息傳遞給服務(wù)器, 又被Fiddler截獲。Fiddler將截獲的密文用自己偽造證書(shū)的私鑰解開(kāi), 獲得并計(jì)算得到HTTPS通信用的對(duì)稱密鑰enc_key。Fiddler將對(duì)稱密鑰用服務(wù)器證書(shū)公鑰加密傳遞給服務(wù)器。
  5. 第五步,與普通過(guò)程中服務(wù)器端的操作相同,服務(wù)器用私鑰解開(kāi)后建立信任,然后再發(fā)送加密的握手消息給客戶端。
  6. 第六步,F(xiàn)iddler截獲服務(wù)器發(fā)送的密文, 用對(duì)稱密鑰解開(kāi), 再用自己偽造證書(shū)的私鑰加密傳給客戶端。
  7. 第七步,客戶端拿到加密信息后,用公鑰解開(kāi),驗(yàn)證HASH。握手過(guò)程正式完成,客戶端與服務(wù)器端就這樣建立了”信任“。

在之后的正常加密通信過(guò)程中,F(xiàn)iddler如何在服務(wù)器與客戶端之間充當(dāng)?shù)谌吣兀?/p>

服務(wù)器—>客戶端:Fiddler接收到服務(wù)器發(fā)送的密文, 用對(duì)稱密鑰解開(kāi), 獲得服務(wù)器發(fā)送的明文。再次加密, 發(fā)送給客戶端。
客戶端—>服務(wù)端:客戶端用對(duì)稱密鑰加密,被Fiddler截獲后,解密獲得明文。再次加密,發(fā)送給服務(wù)器端。由于Fiddler一直擁有通信用對(duì)稱密鑰enc_key, 所以在整個(gè)HTTPS通信過(guò)程中信息對(duì)其透明。

從上面可以看到,F(xiàn)iddler抓取HTTPS協(xié)議成功的關(guān)鍵是根證書(shū)(具體是什么,可Google),這是一個(gè)信任鏈的起點(diǎn),這也是Fiddler偽造的CA證書(shū)能夠獲得客戶端和服務(wù)器端信任的關(guān)鍵。
接下來(lái)我們就來(lái)看如果設(shè)置讓Fiddler抓取HTTPS協(xié)議。

三、Fiddler抓取HTTPS設(shè)置

注意以下操作的前提是,手機(jī)已經(jīng)能夠連上Fiddler,這部分的配置過(guò)程簡(jiǎn)單就不贅述了,可參考:手機(jī)如何連接Fiddler
如何繼續(xù)配置讓Fiddler抓取到HTTPS協(xié)議呢?
(一)首先對(duì)Fiddler進(jìn)行設(shè)置:打開(kāi)工具欄->Tools->Fiddler Options->HTTPS

對(duì)Fiddler進(jìn)行設(shè)置

選中Capture HTTPS CONNECTs,因?yàn)槲覀円肍iddler獲取手機(jī)客戶端發(fā)出的HTTPS請(qǐng)求,所以中間的下拉菜單中選中from remote clients only。選中下方Ignore server certificate errors.
(二)然后,就是手機(jī)安裝Fiddler證書(shū)。
這一步,也就是我們上面分析的抓取HTTPS請(qǐng)求的關(guān)鍵。
操作步驟很簡(jiǎn)單,打開(kāi)手機(jī)瀏覽器,在瀏覽器地址輸入代理服務(wù)器IP和端口,會(huì)看到一個(gè)Fiddler提供的頁(yè)面。

接著點(diǎn)擊最下方的FiddlerRoot certificate,這時(shí)候點(diǎn)擊確定安裝就可以下載Fiddler的證書(shū)了。
下載安裝完成好后,我們用手機(jī)客戶端或者瀏覽器發(fā)出HTTPS請(qǐng)求,F(xiàn)iddler就可以截獲到了,就跟截獲普通的HTTP請(qǐng)求一樣。

好啦,以上就是關(guān)于HTTPS的簡(jiǎn)介以及Fiddler如何獲取HTTPS協(xié)議的原理和配置,看到Fiddler整齊劃一地截獲到HTTP和復(fù)雜的HTTPS協(xié)議,心里還有點(diǎn)小激動(dòng)呢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,409評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,569評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,360評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,895評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,123評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,559評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,742評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評(píng)論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,981評(píng)論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,363評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,622評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,354評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,707評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容