深入解析:HTTP和HTTPS的三次握手與四次揮手

蓝易云發表於2024-12-03

HTTP和HTTPS的握手與揮手過程詳解

在網路通訊中,HTTPHTTPS 是常見的協議,它們分別用於無加密和加密的請求與響應過程。儘管它們的基本工作原理相似,但由於安全性要求,HTTPS需要比HTTP更復雜的步驟來確保資料傳輸的加密性和完整性。下面將詳細解釋HTTP與HTTPS的握手和揮手過程,並對兩者進行對比。


一、HTTP的三次握手過程

三次握手是客戶端與服務端之間建立TCP連線的過程,確保連線的可靠性。

  1. 客戶端傳送SYN包
    客戶端向伺服器傳送一個 SYN(同步)包,告訴伺服器它希望建立連線。此時客戶端處於 SYN_SEND 狀態,等待伺服器的響應。
  2. 服務端回應SYN-ACK包
    服務端接收到SYN包後,表示同意建立連線,於是傳送一個 SYN-ACK(同步-確認)包給客戶端。服務端處於 SYN_RCVD 狀態。
  3. 客戶端回應ACK包
    客戶端收到SYN-ACK包後,向服務端傳送 ACK(確認)包。此時,客戶端和服務端都處於 ESTABLISHED(已建立連線)狀態,三次握手完成,資料傳輸可以開始。

HTTP的三次握手示意圖:

客戶端                   服務端
   |--------------------SYN------------------>|
   |<------------------SYN-ACK-----------------|
   |-------------------ACK------------------->|

二、HTTPS的三次握手過程

HTTPS除了包含HTTP的三次握手外,還涉及到SSL/TLS協議的握手,這一過程更為複雜,主要用於確保通訊的安全性。

  1. 客戶端傳送ClientHello
    客戶端向服務端傳送一個 ClientHello 訊息,包含其支援的加密演算法(如RSA、ECDSA等)、支援的協議版本、壓縮方法以及生成的隨機數等資訊。
  2. 服務端傳送ServerHello併發證書
    服務端收到ClientHello後,選擇一種加密演算法並返回 ServerHello 訊息,傳送其數字證書以便客戶端驗證其身份。
  3. 客戶端驗證證書並生成PreMasterSecret
    客戶端驗證服務端的證書是否有效,如果有效,則生成一個 PreMasterSecret,透過服務端的公鑰加密後傳送給服務端。
  4. 雙方生成會話金鑰並確認
    服務端使用私鑰解密PreMasterSecret,並與客戶端各自生成會話金鑰。最後,雙方透過 Finished 訊息確認握手過程已完成,進入加密通訊階段。

HTTPS的握手示意圖:

客戶端                   服務端
   |------------------ClientHello---------------->|
   |<---------------ServerHello + Cert------------|
   |----------------PreMasterSecret ------------->|
   |<------------------Finished-------------------|

三、HTTP的四次揮手過程

TCP連線的關閉需要四次揮手,以確保雙方都能正確地關閉連線,避免資料丟失。

  1. 客戶端傳送FIN包
    客戶端沒有資料傳送時,傳送一個 FIN(結束)包,告知服務端關閉連線。
  2. 服務端回應ACK包
    服務端接收到FIN包後,傳送一個 ACK(確認)包,表示已收到關閉請求。
  3. 服務端傳送FIN包
    服務端在完成資料傳送後,傳送一個 FIN 包給客戶端,表示它也希望關閉連線。
  4. 客戶端回應ACK包
    客戶端收到服務端的FIN包後,傳送一個 ACK 包確認。此時,連線正式關閉。

HTTP的四次揮手示意圖:

客戶端                   服務端
   |-------------------FIN--------------------->|
   |<------------------ACK-----------------------|
   |<------------------FIN-----------------------|
   |-------------------ACK--------------------->|

四、HTTPS的四次揮手過程

HTTPS在四次揮手的基礎上還涉及到SSL/TLS協議層的關閉。過程與HTTP相似,但由於加密資料的處理,握手和揮手過程相對複雜。

  1. 客戶端傳送關閉連線請求
    客戶端傳送一個關閉連線的訊息,要求關閉SSL/TLS會話。
  2. 服務端回應關閉連線訊息
    服務端回應關閉連線的訊息,表示同意斷開SSL/TLS會話。
  3. 服務端傳送關閉連線請求
    服務端傳送關閉連線的訊息,告知客戶端服務端即將斷開連線。
  4. 客戶端回應關閉連線訊息
    客戶端回應關閉連線訊息,最終完成SSL/TLS連線的斷開。

五、HTTP與HTTPS的區別與聯絡

專案HTTPHTTPS
加密不加密,資料傳輸明文使用SSL/TLS協議加密,確保資料安全性
安全性無資料保護,容易受到中間人攻擊(MITM)使用證書進行身份驗證,防止偽裝與篡改資料
握手過程三次握手,簡單的TCP連線建立過程三次握手與SSL/TLS握手結合,安全性更高
揮手過程四次揮手,TCP連線正常關閉四次揮手,確保加密連線斷開
80埠443埠

六、總結

  • HTTPHTTPS都依賴於TCP連線的三次握手和四次揮手過程,但HTTPS在這基礎上增加了SSL/TLS協議層的加密與身份驗證,確保資料傳輸的機密性和完整性。
  • HTTPS的握手和揮手過程更為複雜,需要進行數字證書驗證、金鑰交換等步驟,因此它比HTTP更加安全。
  • 在設計網路通訊系統時,選擇使用HTTP還是HTTPS取決於是否需要保障資料的安全性。如果資料傳輸涉及敏感資訊,強烈建議使用HTTPS。

相關文章