Charles的HTTPS抓包方法及原理分析

背景

作為移動平臺的RD迅腔,項(xiàng)目開發(fā)過程中一項(xiàng)比較重要的甩鍋技能——抓包應(yīng)該大家都比較熟悉了牍帚,畢竟有些bug可能是由服務(wù)端下發(fā)的數(shù)據(jù)出錯導(dǎo)致的银伟。雖然抓包工具很好用伍伤,但是如果不做一些設(shè)置的話并徘,對于HTTPS協(xié)議的請求就無能為力了,比如這樣

這對于一些注重安全性的應(yīng)用來說扰魂,或許就不是特別好使麦乞,我們的項(xiàng)目目前也在逐漸從HTTP轉(zhuǎn)向HTTPS蕴茴,因此掌握這些技巧還是比較有用的。抓包工具多種多樣姐直,比較好使的還是Charles和Fiddler倦淀,下面就簡單的介紹下HTTPS的相關(guān)原理并以Charles為例來介紹下如何抓取HTTPS協(xié)議的包。

原理分析

其實(shí)使用工具抓HTTPS的包本身并不難声畏,兩三步簡單的操作就可以實(shí)現(xiàn)撞叽,關(guān)鍵如果不理解原理的話,總覺得不舒服斯基插龄,所以把原理分析放在前面愿棋。

HTTPS(Hyper Text Transfer Protocol Secure),是一種基于SSL/TLS的HTTP均牢,所有的HTTP數(shù)據(jù)都是在SSL/TLS協(xié)議封裝之上進(jìn)行傳輸?shù)目酚辍TTPS協(xié)議是在HTTP協(xié)議的基礎(chǔ)上,添加了SSL/TLS握手以及數(shù)據(jù)加密傳輸徘跪,也屬于應(yīng)用層協(xié)議甘邀。所以,研究HTTPS協(xié)議原理垮庐,最終就是研究SSL/TLS協(xié)議松邪。

運(yùn)行過程

我們都知道HTTPS在保證數(shù)據(jù)安全傳輸上使用了加密算法,但是具體是如何加密的哨查,或許許多人和我一樣也是云里霧里逗抑。
實(shí)際上SSL/TLS協(xié)議的基本思路是非對稱加密和對稱加密結(jié)合來傳輸數(shù)據(jù),一言以弊之解恰,HTTPS是通過一次非對稱加密算法(如RSA算法)進(jìn)行了協(xié)商密鑰的生成與交換锋八,然后在后續(xù)通信過程中就使用協(xié)商密鑰進(jìn)行對稱加密通信,之所以要使用這兩種加密方式的原因在于非對稱加密計(jì)算量較大护盈,如果一直使用非對稱加密來傳輸數(shù)據(jù)的話挟纱,會影響效率。
運(yùn)行過程盜用巨人的圖腐宋,可以表示如下

有了圖就可以一步一步分析了

1.HTTPS請求

這個步驟是整個通信過程中的第一步紊服,首先,客戶端(通常是瀏覽器)先向服務(wù)器發(fā)出加密通信的請求胸竞,在這一步中欺嗤,客戶端主要向服務(wù)器提供以下信息:

  • 支持的協(xié)議版本,比如TLS 1.0版
  • 一個客戶端生成的隨機(jī)數(shù)RandomC卫枝,稍后用于生成“協(xié)商密鑰”煎饼。
  • 支持的加密方法,比如RSA公鑰加密校赤。
  • 支持的壓縮方法吆玖。

2.服務(wù)器響應(yīng)

服務(wù)器收到客戶端請求后筒溃,向客戶端發(fā)出回應(yīng),服務(wù)器的回應(yīng)一般包含以下內(nèi)容:

  • 確認(rèn)使用的加密通信協(xié)議版本沾乘,比如TLS 1.0版本怜奖。如果瀏覽器與服務(wù)器支持的版本不一致,服務(wù)器關(guān)閉加密通信翅阵。
  • 一個服務(wù)器生成的隨機(jī)數(shù)RandomS歪玲,稍后用于生成“協(xié)商密鑰”*。
  • 從客戶端支持的加密方法中選擇一個作為確認(rèn)要使用的加密方法掷匠,比如RSA公鑰加密滥崩。
  • 服務(wù)器證書。
    這個服務(wù)器證書就是表明服務(wù)器身份的東西槐雾,其中也包含了非對稱加密中需要使用的公鑰夭委。

3.證書校驗(yàn)幅狮、生成密碼募强、公鑰加密

客戶端收到服務(wù)器回應(yīng)以后,首先驗(yàn)證服務(wù)器返回的證書崇摄。如果證書不是可信機(jī)構(gòu)頒發(fā)擎值,或者證書中的域名與實(shí)際域名不一致,或者證書已經(jīng)過期逐抑,以瀏覽器為例客戶端會向網(wǎng)頁訪問者顯示一個警告鸠儿,由其選擇是否還要繼續(xù)通信。 如果證書沒有問題厕氨,客戶端就會從證書中取出服務(wù)器的公鑰进每。然后生成密碼、公鑰加密命斧。
生成密碼的過程會先產(chǎn)生一個隨機(jī)數(shù)Pre-master key田晚,該隨機(jī)數(shù)是整個握手階段出現(xiàn)的第三個隨機(jī)數(shù),稍后會經(jīng)過公鑰加密發(fā)送到服務(wù)端国葬,有了它以后贤徒,客戶端和服務(wù)器就同時有了三個隨機(jī)數(shù)——RandomC,RandomS汇四,Pre-master key接奈,接著雙方就用事先商定的加密方法,各自生成本次會話所用的同一把“協(xié)商密鑰”通孽。

4.加密信息C-S

加密信息是指上面一步生成的內(nèi)容序宦,主要包括

  • 一個隨機(jī)數(shù)Pre-master key。用于給服務(wù)端生成“協(xié)商密鑰”背苦。
  • 編碼改變通知互捌,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送堡僻。
  • 客戶端握手結(jié)束通知,表示客戶端的握手階段已經(jīng)結(jié)束疫剃。這一項(xiàng)通常也是前面發(fā)送的所有內(nèi)容的hash值钉疫,用來供服務(wù)器校驗(yàn)。

5.私鑰解密巢价、解密握手消息牲阁、驗(yàn)證Hash

服務(wù)器收到客戶端公鑰加密的第三個隨機(jī)數(shù)Pre-master key之后,通過自身私鑰解密該數(shù)值并由之前的RandomC和RandomS計(jì)算生成本次會話所用的“會話密鑰”壤躲。然后城菊,通過約定的Hash算法驗(yàn)證客戶端發(fā)送的數(shù)據(jù)完整性。

6.加密信息S-C

主要是指

  • 編碼改變通知碉克,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送凌唬。
  • 服務(wù)器握手結(jié)束通知,表示服務(wù)器的握手階段已經(jīng)結(jié)束漏麦。這一項(xiàng)同時也是前面發(fā)生的所有內(nèi)容的hash值客税,用來供客戶端校驗(yàn)。

7.解密握手消息撕贞、驗(yàn)證Hash

客戶端解密并計(jì)算握手消息的HASH更耻,如果與服務(wù)端發(fā)來的HASH一致,此時握手過程結(jié)束捏膨。

8.正常加密通信

握手成功之后秧均,所有的通信數(shù)據(jù)將由之前協(xié)商密鑰及約定好的算法進(jìn)行加密解密。

Charles抓HTTPS包原理

Charles本身是一個協(xié)議代理工具号涯,如果只是普通的HTTP請求目胡,因?yàn)閿?shù)據(jù)本身沒經(jīng)過再次加密,因此作為代理可以知道所有客戶端發(fā)送到服務(wù)端的請求內(nèi)容以及服務(wù)端返回給客戶端的數(shù)據(jù)內(nèi)容链快,這也就是抓包工具能夠?qū)?shù)據(jù)傳輸內(nèi)容直接展現(xiàn)出來的原因誉己。對于HTTPS請求,4久又,6巫延,8步驟的數(shù)據(jù)都已經(jīng)經(jīng)過了加密,代理如果什么都不做的話是無法獲取到其中的內(nèi)容的地消。為了實(shí)現(xiàn)這個過程的數(shù)據(jù)獲取炉峰,Charles需要做的事情是對客戶端偽裝服務(wù)端,對服務(wù)端偽裝客戶端脉执,具體

  • 截獲真實(shí)客戶端的HTTPS請求疼阔,偽裝客戶端向真實(shí)服務(wù)端發(fā)送HTTPS請求
  • 接受真實(shí)服務(wù)器響應(yīng),用Charles自己的證書偽裝服務(wù)端向真實(shí)客戶端發(fā)送數(shù)據(jù)內(nèi)容

一般情況下HTTPS中是客戶端對服務(wù)端做證書校驗(yàn),當(dāng)然也有一些金融機(jī)構(gòu)會有用戶證書作為提供給服務(wù)端做用戶認(rèn)證的工具婆廊,保證發(fā)出請求的的確是這部分授權(quán)用戶迅细。我們僅分析客戶端對服務(wù)單做證書校驗(yàn)的這種。Android有自己的一套HTTPS通信調(diào)用方式淘邻,以HttpsURLConnection為例

上面這段代碼就是一個https請求的樣例茵典,這種方法的特點(diǎn)是證書校驗(yàn)工作交由系統(tǒng)處理,系統(tǒng)只會允許可信CA簽發(fā)的數(shù)字證書能夠訪問宾舅,私有CA簽發(fā)的數(shù)字證書(比如12306以及我們上文說的Charles證書)是無法訪問的统阿。
那么如何繞過呢,

  • 第一種方法是修改Https通信代碼筹我,這種只對開發(fā)者開發(fā)應(yīng)用的時候好使扶平,我們需要實(shí)現(xiàn)X509TrustManager接口去做自己的一套證書校驗(yàn),它并不通用蔬蕊,尤其是對于我們抓包而言是不可行的结澄,因?yàn)槲覀儧]法去修改別人應(yīng)用中的代碼。
  • 第二種方法是將私有CA簽發(fā)的數(shù)字證書安裝到手機(jī)中并且作為受信任證書保存岸夯,這種方式是我們推薦的方式麻献,唯一的缺點(diǎn)是你的手機(jī)上可能會在通知欄一直留著一個特殊標(biāo)志,告訴你網(wǎng)絡(luò)可能被監(jiān)控囱修。恩赎瑰,不監(jiān)控我們怎么抓包呢王悍,哈哈破镰。

Charles抓包步驟

原理都說完了,下面就是貼圖時間压储,我們要做的最重要的其實(shí)只有一件事情鲜漩,就是

將私有CA簽發(fā)的數(shù)字證書安裝到手機(jī)中并且作為受信任證書保存

一步一步來

  • 首先打開Charles菜單,選擇安裝Charles證書到移動設(shè)備
  • Charles提示你如何安裝集惋,這里如何用手機(jī)連接Charles就不做敘述了孕似,普通的HTTP抓包都需要執(zhí)行
  • 手機(jī)上打開http://charlesproxy.com/getssl,系統(tǒng)提示安裝證書刮刑,安裝完成之后通知欄告知網(wǎng)絡(luò)受到監(jiān)控
    device-2017-01-25-111551.png
  • 選擇Proxy-SSL Proxying Settings喉祭,設(shè)置啟用SSL代理能力,并自行Add需要抓取的服務(wù)地址
Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雷绢,一起剝皮案震驚了整個濱河市泛烙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翘紊,老刑警劉巖蔽氨,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹉究,警方通過查閱死者的電腦和手機(jī)宇立,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來自赔,“玉大人妈嘹,你說我怎么就攤上這事爵政∽肮睿” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵桑腮,是天一觀的道長痘绎。 經(jīng)常有香客問我津函,道長,這世上最難降的妖魔是什么孤页? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任尔苦,我火速辦了婚禮,結(jié)果婚禮上行施,老公的妹妹穿的比我還像新娘允坚。我一直安慰自己,他們只是感情好蛾号,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布稠项。 她就那樣靜靜地躺著,像睡著了一般鲜结。 火紅的嫁衣襯著肌膚如雪展运。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天精刷,我揣著相機(jī)與錄音拗胜,去河邊找鬼。 笑死怒允,一個胖子當(dāng)著我的面吹牛埂软,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纫事,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼勘畔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丽惶?” 一聲冷哼從身側(cè)響起炫七,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚊夫,沒想到半個月后诉字,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年壤圃,在試婚紗的時候發(fā)現(xiàn)自己被綠了陵霉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡伍绳,死狀恐怖踊挠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冲杀,我是刑警寧澤效床,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站权谁,受9級特大地震影響剩檀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旺芽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一沪猴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧采章,春花似錦运嗜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抵怎,卻和暖如春奋救,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背便贵。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工菠镇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人承璃。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蚌本,于是被迫代替她去往敵國和親盔粹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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