HTTPS加密過程詳解

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer 超文本傳輸安全協議)

HTTPS在傳統的HTTP和TCP之間加了一層用於加密解密的SSL/TLS層(安全套接層Secure Sockets Layer/安全傳輸層Transport Layer Security)層。使用HTTPS必須要有一套自己的數字證書(包含公鑰和私鑰)。

HTTPS解決的問題

  • 信息加密傳輸:第三方無法竊聽;
  • 校驗機制:一旦被篡改,通信雙方會立刻發現;
  • 身份證書:防止身份被冒充。

HTTPS加密過程:

  1. 客戶端請求服務器獲取證書公鑰
  2. 客戶端(SSL/TLS)解析證書(無效會彈出警告)
  3. 生成隨機值
  4. 公鑰加密隨機值生成密鑰
  5. 客戶端將祕鑰發送給服務器
  6. 服務端用私鑰解密祕鑰得到隨機值
  7. 將信息和隨機值混合在一起進行對稱加密
  8. 將加密的內容發送給客戶端
  9. 客戶端用祕鑰解密信息

https.png

加密過程使用了對稱加密和非對稱加密。

  • 對稱加密: 客戶端和服務端採用相同的密鑰經行加密

        encrypt(明文,祕鑰) = 密文
        decrypt(密文,祕鑰) = 明文
  • 非對稱加密:客戶端通過公鑰加密。服務端通過私鑰解密

        encrypt(明文,公鑰) = 密文
    
        decrypt(密文,私鑰) = 明文

因爲TLS握手的過程中採用了非對稱加密,客戶端本身不知道服務器的祕鑰,這樣通信就不會被中間人劫持。此外這一步服務端還提供了證書,並且可能要求客戶端提供證書。關於證書下文會提到,只要有了證書,就能保證和你通信的對方是真實的,而不是別人僞造的。

那然後驗證證書呢?

  1. 客戶端獲取到了站點證書,拿到了站點的公鑰
  2. 客戶端找到其站點證書頒發者的信息
  3. 站點證書的頒發者驗證服務端站點是否可信
  4. 往上回溯,找到根證書頒發者
  5. 通過根證書頒發者一步步驗證站點證書頒佈者是否可信

附:

  • HTTPS默認使用443端口,而HTTP默認使用80端口。
  • TLS就是從SSL發展而來的,只是SSL發展到3.0版本後改成了TLS
  • 第一次請求中TLS握手的代價很大
  • 後續的請求會共用第一次請求的協商結果

我的GitHub地址

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章