使用wireshark分析https


從上文中分析了http的抓包使用wireshark分析http,接下來想繼續分析https於是搭建了https的環境。現在開始使用wireshark抓包軟件分析https。


https交互的大致步驟

密碼學算法

要了解https首先要稍微了解算法學的知識,在這里主要是RSA算法和DES算法,作為工科,我覺得不需要十分了解算法內部的實現,只需要了解用法即可。下面就談談我對這兩種算法的大致理解。

RSA算法


通過RSA可以得到兩個秘鑰,一個是A,一個是B,兩個可以互補

使用秘鑰A加密的密文,只有用B才能解開

使用秘鑰B加密的密文,只有用A才能解開

使用A可以推到出B,使用B不能推到出A 參考鏈接1 參考鏈接2

A是私鑰,不能公開;B是公鑰,可以公開

優點:公鑰可以隨意公開;缺點:非對稱加密,運算量較大


通過上述對RSA算法的簡要概括,可以分析運用RSA的一些日常使用的功能。

首先是數據的加密,假設我是服務端,利用RSA算法算出了私鑰A和公鑰B,將公鑰B公開出去,私鑰A我自己保存起來。只要別人和我通信,都是用公鑰B將數據加密,但是只有我擁有私鑰A,所以就只有我能看到數據的原始內容;盡管大家都擁有公鑰B,但是都不能解開這個數據。這樣就實現了數據的加密功能。

其次用到的功能是數字簽名,用來驗證數據的源頭是否是那個人。假設我是數據的源頭,利用RSA算法算出了私鑰A和公鑰B,將公鑰B公開出去,私鑰A我自己保存起來。我是數據源頭,需要對外發送數據,首先用Hash函數給數據生成數字摘要,然后用私鑰對數字摘要進行加密,這樣就生成了“數字簽名”,然后我將數字簽名加在要發送的數據之后,這樣就完成了簽名操作。接收方接收到數據之后,首先使用公鑰對簽名進行解密,然后用Hash函數給數據生成數字摘要,最后將生成的數字摘要和解密的數據進行對比,如果與之對應則說明發送源頭是私鑰的所有者。這樣就進行了對數據源頭的驗證。數字簽名是什么

DES算法

對稱加密即加密方和解密方使用一樣的秘鑰,大家都通過這個秘鑰進行加密和解密。

優點:運算速度快;缺點:雙方的秘鑰都不能泄露

Diffie-Hellman算法

此算法的作用是通信雙方在不安全的信道上面共享一個秘鑰,並且只有通信雙方知道秘鑰的內容。通常用在傳輸DES對稱加密的秘鑰。

使用wireshark抓包

抓包准備

為了讓第一次握手的數據存在,抓包之前要清楚瀏覽器的緩存,然后直接輸入域名進行訪問,用wireshark的ip過濾之后的抓包如下圖所示。


 
抓包

http重定向

由於是直接訪問域名,Apache服務器有重定向的功能直接跳轉到了https模式,由於http的包比較簡單,所以就簡要描述一下。

12、13、14、14 tcp/ip連接的創建

17、20 http相應,返回的是301重定向

 
重定向

71、72、73、74 與http服務斷開連接

分析https

為了更好的分析https,我們直接過濾443端口。

 
https抓包

tcp/ip三次握手

19 客戶端向443端口發送SYN信號

21 服務端回應連接

22 tcp/ip三次握手完成

ssl層

25 Client Hello信號,客戶端發送隨機數字+自己可以支持的加密方法。

26 ACK應答

25 Server Hello信號,服務器發送隨機數字+選擇雙方都支持的加密方式,這里選擇的是TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,后面還將自己的證書發送了。

26 發送自己的公鑰和從CA申請的證書

 
公鑰和證書

27 服務端發送DH算法的參數,並發送Server Hello Done信號,發送Sever key change,告訴客戶端我開始轉換成對稱秘鑰了

28 TCP/IP的ACK接收信號

29 在這期間,客戶端驗證CA的證書,並且在第一步交換DH算法的參數,此時客戶端和服務端的對稱算法秘鑰達成一致。在第二步中,客戶端發送Change cipher信號(我也開始轉換成對稱秘鑰了),最后一步發送用對稱加密的第一個數據,也就是finish信號

 
29號包

30 客戶端發送的請求頭(數據時經過加密過的)

31 new session ticket,這樣的操作是為了之后不用再進行握手,節約服務器的資源

32 服務端用密文形式發送的html文檔

80 encrypt alert,通信結束信號

78、79、81、82 tcp/ip的斷開連接

重新連接https

在經過上一次的握手之后,下一次的https的重連接會變得更加簡潔


 
重連接

在49號數據包上的Client hello上,附加了上次服務器給的new session ticket,這樣就減少了驗證的次數,使重新連接更加方便

 
重連接的sessionid

一些問題的解答

CA發行的證書可以證明域名是服務器端所有,但是誰又能證明證書是可靠的而不是偽造的呢?

在https通信中,證書就是數字簽名,瀏覽器可以通過公鑰對數字簽名進行解密來證實服務器公鑰的有效性。而數字簽名的公鑰必須是最安全可靠的,其實CA廠商的公鑰都是保存在操作系統中的,這樣就保證了公鑰一定是最安全的。以前還發生過一些CA公司私鑰泄露的事情,以至於全球的操作系統必須馬上更新。

參考鏈接

RSA公鑰,私鑰和數字簽名這樣最好理解

HTTPS和證書

【騰訊TMQ】從 wireshark 抓包開始學習 https



作者:魁爺的黑作坊
鏈接:https://www.jianshu.com/p/cae210878456
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM