前言
比起http,https是更安全的,傳輸過程中加密的。但是具體的加密過程是怎么樣我一直一知半解。花了點時間抓包簡單分析了一下,希望對大家有用。
在windows平台下抓tcp包是用wireshark的了。沒啥好說的。
我們平常的一次https 的請求,如下所示
創建https連接
創建https鏈接是最復雜的部分。
首先是tcp三次握手。基於tcp的東西,這是必須的。
然后是客戶端告知服務器要創建https連接,這一步稱之為 client hello。客戶端告知服務器要創建一個怎么樣的https協議,並且發出一個client的隨機數。
然后是服務器響應客戶端一個ack(服務器說我收到啦^_^)
接下來服務器向客戶端發出server hello。服務器與客戶端確認https具體什么協議(TLS V1.0? V2.0?等),而且發出一個server端的隨機數。
客戶端沒有ack~,服務器告知客戶端證書。里面有一個證書,通過diffie-hellman算法來加解密。
客戶端說我收到啦,有一次ack。
客戶端一次diffie-hellman參數校驗。
最后,server端響應session-ticket,用於全程加解密。
連接就創建完了。以后就是全程加密的傳輸啦。
簡述創建https的過程:
- tcp三次握手
- 客戶端發送hello client
- 服務器發送hello server
- 服務器發送證書、diffie-hellman參數
- 客戶端響應diffie-hellman參數
- 服務器響應sessionTicket
傳輸
全程加密, 沒啥。。。
斷開
在傳統的四次揮手中, 多了一個 Alert Message: Encrypted Alert。 沒什么的。
參考
http://blog.csdn.net/fw0124/article/details/40875629
http://blog.csdn.net/fw0124/article/details/40983787