Wireshark对HTTPS数据的解密
之前有介紹《Wireshark抓包分析——TCP/IP協(xié)議》,那如果是HTTPS協(xié)議,可以抓包分析嗎?基于好奇,查閱了下相關(guān)資料分享給大家。在講解密之前先來(lái)看下HTTPS與HTTP的不同之處,HTTPS是在TCP/IP與HTTP之間,增加一個(gè)安全傳輸層協(xié)議,而這個(gè)安全傳輸層協(xié)議一般用SSL或TLS,類似于下圖。即我們所說(shuō)的HTTPS=HTTP+SSL/TLS。
SSL協(xié)議分為SSL記錄協(xié)議層和SSL握手協(xié)議層。SSL握手協(xié)議建立在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開(kāi)始前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。SSL記錄協(xié)議將數(shù)據(jù)塊進(jìn)行拆分壓縮,計(jì)算消息驗(yàn)證碼,加密,封裝記錄頭然后進(jìn)行傳輸。如下圖顯示,這里不展開(kāi),有興趣的童鞋可以繼續(xù)自行深入了解。
應(yīng)用層協(xié)議 |
SSL握手協(xié)議 |
SSL記錄協(xié)議 |
TCP |
IP |
Wireshark在對(duì)HTTP請(qǐng)求分析時(shí),一般是通過(guò)選定數(shù)據(jù)右鍵鼠標(biāo),查看Follow TCP Stream。
即可以看到請(qǐng)求的詳細(xì)內(nèi)容了。
Wireshark對(duì)HTTPS請(qǐng)求數(shù)據(jù)又是如何分析的呢,實(shí)際操作了下,以訪問(wèn)CSDN首頁(yè)為例,可以看到抓取的數(shù)據(jù)包如下:
根據(jù)截圖會(huì)發(fā)現(xiàn)2個(gè)略“神奇”的東東,(1)雖然過(guò)濾條件設(shè)置了SSL,但過(guò)濾結(jié)果滿屏都是TLS的身影,隨機(jī)找了其他一些網(wǎng)站也都是用TLS。簡(jiǎn)單查閱了下資料,發(fā)現(xiàn)TLS是以建立在SSL V3.0的基礎(chǔ)上,兩者的加密算法和MAC算法都不一樣,而協(xié)議本身差異性不大。TLS協(xié)議也是由兩層組成: TLS 記錄協(xié)議(TLS Record)和 TLS 握手協(xié)議(TLS Handshake)。較低的層為 TLS 記錄協(xié)議。忽略協(xié)議的差異性,后面會(huì)拿TLS來(lái)解密。現(xiàn)在來(lái)看另外1個(gè)滿屏滿眼的東東。(2)好多hello呀,Client Hello和Server Hello好多,這是什么呢?這是TLS的握手。整個(gè)握手階段如下,可分為5步。
第一步,瀏覽器給出協(xié)議版本號(hào)、一個(gè)客戶端生成的隨機(jī)數(shù),以及客戶端支持的加密方法。
第二步,服務(wù)器確認(rèn)雙方使用的加密方法,使用的tls版本號(hào)和一個(gè)隨機(jī)數(shù)。
第三部,并給出數(shù)字證書、以及一個(gè)服務(wù)器運(yùn)行Diffie-Hellman算法生成的參數(shù),比如pubkey。
第四部,瀏覽器獲取服務(wù)器發(fā)來(lái)的pubkey,計(jì)算出另一個(gè)pubkey,發(fā)給服務(wù)器。
第五部,服務(wù)器發(fā)給瀏覽器一個(gè)session ticket。
具體握手過(guò)程也可以通過(guò)Wireshark的抓包一步步驗(yàn)證,這里不再詳述,還是專心來(lái)看看如何使用Wireshark來(lái)數(shù)據(jù)解密。我們現(xiàn)在獲取到的Wireshark抓包數(shù)據(jù)在握手完成之后,還是各種TLSv1.2的東東,都是加密后的數(shù)據(jù)。
解密方式有好幾種,介紹我覺(jué)得最簡(jiǎn)單的,通過(guò)瀏覽器保存的TLS 會(huì)話中使用的對(duì)稱密鑰來(lái)進(jìn)行數(shù)據(jù)解密。在瀏覽器接收到數(shù)據(jù)之后,會(huì)使用秘鑰對(duì)數(shù)據(jù)進(jìn)行解密,部分瀏覽器會(huì)在某個(gè)地方會(huì)存儲(chǔ)這個(gè)密鑰,我們只要獲取瀏覽器中的會(huì)話密鑰就能解密數(shù)據(jù)。以windows系統(tǒng)+Chrome瀏覽器為例,首先要導(dǎo)出瀏覽器存儲(chǔ)的密鑰,通過(guò)計(jì)算機(jī)屬性——高級(jí)系統(tǒng)設(shè)置——環(huán)境變量,新建一個(gè)變量名“SSLKEYLOGFILE”的變量,變量值是導(dǎo)出的密鑰具體文件地址。
設(shè)置后可以通過(guò)Chrome瀏覽器打開(kāi)任意一個(gè)HTTPS網(wǎng)址,此時(shí)查看變量值對(duì)應(yīng)路徑,已經(jīng)生成sslkey.log。
密鑰成功導(dǎo)出到本地啦。現(xiàn)在可以將密鑰應(yīng)用到Wireshark了。具體路徑如下:菜單欄Edit——Preferences——Protocols——SSL(注意,不論是SSL還是TLS這里都是SSL,沒(méi)有單獨(dú)的TLS選項(xiàng)),在(Pre)-Master-Secretlog filename中選擇剛才設(shè)置的變量值。
配置完成,看下效果:
看到有HTTP了,之前都是TLSv1.2。同時(shí),WireShark下面會(huì)有一個(gè)“Decrypted SSL data”即已解密的SSL Data的標(biāo)簽,點(diǎn)擊之后你就可以如上圖所示的看到已經(jīng)解密的TLS數(shù)據(jù)包的相信信息了。
覺(jué)得這樣太難看了?OK,也可以像HTTP一樣,通過(guò)鼠標(biāo)右鍵在菜單欄中選擇“Follow SSL Stream”,查看完整的HTTPS解密之后的請(qǐng)求數(shù)據(jù)哦。
除此之外,上面還有很多TLSv1.2的東東,比如:client_key_exchange、Session Ticket,這是最初提到過(guò)的TLS握手過(guò)程的第四步和第五步,并不是請(qǐng)求數(shù)據(jù)包的內(nèi)容,因此看到其中像是沒(méi)有解密的內(nèi)容也不要奇怪哦。
——推薦閱讀——
網(wǎng)易云信IM小程序上線?我們是這么做的!>>
全面復(fù)盤!深度剖析直播答題產(chǎn)品架構(gòu)的難點(diǎn)與坑>>
如何快速設(shè)計(jì)短信驗(yàn)證碼>>
如何做好Android 端音視頻測(cè)試>>
總結(jié)
以上是生活随笔為你收集整理的Wireshark对HTTPS数据的解密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【iOS篇】从容面对App崩溃
- 下一篇: React事件系统研究总结