HTTPS加密過程詳解

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

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

HTTPS解決的問題github

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

HTTPS加密過程:安全

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

https.png

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

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

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

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

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

那而後驗證證書呢?code

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

附:blog

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

個人GitHub地址

參考:ip

相關文章
相關標籤/搜索