Charles如何抓https(原理、教程)

項目最近由 http 轉(zhuǎn)成了 https, 但是charles 不能抓 https 的包,而搜各種資料去發(fā)現(xiàn)都因為 charles 版本過低無法用,所以記錄下我的解決辦法.

Charles為什么能抓 https?

都知道 http是明文傳輸,而 https 的出現(xiàn)就是為了解決這個問題,https 協(xié)議是由 SSL+http 協(xié)議構(gòu)建的加密傳輸網(wǎng)絡(luò)協(xié)議.但既然是加密的,那為什么能抓到?

先看看 Charles 官網(wǎng)是怎么解釋的:

charles_ssl.png

很明顯, "man-in-middle",就是使用中間人攻擊.
因為 https 使用的是非對稱加密,那就要了解https的傳輸交互過程:


https 傳輸過程.jpg
1.首先是客戶端發(fā)起 https 請求,鏈接到server的443接口
2.服務(wù)端收到請求后把公鑰傳給客戶端
3.客戶端解析證書,如果沒有問題,用加密算法生成一個對稱密鑰,然后用公鑰加密
4.把加密后的值傳給服務(wù)端
5.服務(wù)端用私鑰解密后,之后的通信都是對已對稱密鑰進行加密和解密的通信

看起來很安全了吧,但中間人攻擊又是怎么做到的呢?

第一步,當客戶端發(fā)起 SSL握手時,中間人劫持用戶請求然后中間中偽裝客戶端發(fā)起 SSL握手.
第二步,服務(wù)端會發(fā)送公鑰給中間人,當然中間人是有一對自己的公鑰和私鑰,中間人會把中間人自己的公鑰發(fā)送給客戶端.
第三步,客戶端拿到公鑰會根據(jù)加密算法加密,發(fā)送對稱密鑰,這時候中間人利用自己的私鑰可以解出對稱密鑰,這時候中間人已經(jīng)拿到公鑰和對稱密鑰,再用服務(wù)端發(fā)給中間人的公鑰來加密對稱密鑰,發(fā)送給服務(wù)器.
第四步,之后客戶端和服務(wù)端所有的請求的數(shù)據(jù)都會被中間人利用對稱密鑰解密得到所有的信息.

當然 charles 使用的中間人攻擊必須要我們要信任它的證書,不然還是不能得到數(shù)據(jù),https是可以防止中間人攻擊的,因為服務(wù)器的公鑰是用證書的,

charles偽造的證書一般瀏覽器會警告,所以我們需要將charles的證書認為可靠的。從而實現(xiàn)中間人。
以上之后我了解的一點點的相關(guān)知識.


進入教程

Charles版本: V4.0.2
第一步:點擊install Charles Root Certificate, 之后會跳到鑰匙串


step1.png

第二步:找到 Charles 的證書然后選擇使用此證書時: 始終信任.


step2

第三步:在手機上安裝 Charles 的根證書


step3

第四步:在手機上安裝完之后,回到 Charles-Proxy-SSLProxying Setting,
把需要劫持的 host加上,端口號443,注意這里的 host 可以使用通配符也可以直接填 host.


step4.png

到這里就差不多教程就結(jié)束了,這次在 charles 上抓 https 只是工作中的一個小插曲,但是去了解為什么能抓到讓我產(chǎn)生興趣,在去深入了解的過程中也加深和修正了一些知識點,記錄為文.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容