https通信過程、簽名及證書


HTTPS比HTTP安全,它的安全在於通信過程被加密。然而加密算法是用對稱加密,也就是說,客戶端和服務端采用一個相同的密鑰。為了讓雙方得到這個密鑰,前期就有一個很重要的工作:協商密鑰
現在我們簡單模擬一下通信過程:

  • 客戶端:hi,我准備跟你(xx.com)建立HTTPS通信。
  • 服務端:好的,我就是xx.com,這是我的證書,你驗證一下。
  • 客戶端:驗證通過了,你的確是xx.com,我把密鑰發給你,下面的通信咱們就加密了。
  • 服務端:s&&(*3u247(
  • 客戶端:(&DY&#%%&#
1)重要的過程:https要證明自己是合法的,證書+鏈式驗證
2)數字證書的組成
  • 公鑰:Public-Key
  • 簽名:Signature(簽名算法)
  • 簽名算法: Signature Algorithm: sha256WithRSAEncryption
  • 證書頒布機構:Issuer
  • 過期時間:Validity
  • 其他...
3)簽名算法的簽名、校驗過程
//簽名
sign = RSA_Encrypt(sha256(content), privateKey)
 
//校驗簽名
sha256_Content =  RSA_Decrypt(sign, publicKey)
sha256_Content ?= sha256(content)
  • 在非對稱加密體系中,私鑰用來簽名,公鑰用來校驗簽名。
    • ROOT必須可靠可信任,並且證書鏈不能斷掉(否則驗證失敗)

4)https的SSL握手過程(在tcp三次握手的基礎上增加的)

  • https在http的三次握手的基礎之上,增加了SSL握手,來保證整個過程中數據傳輸的安全性
    • 瀏覽器與網站互相發送加密的握手消息並驗證,目的是為了保證雙方都獲得了一致的密碼,並且可以正常的加密解密數據,為后續真正數據的傳輸做一次測試。
  • 流程:
    • 客戶端向服務端發送客戶端支持的加密算法、Hash算法
    • 服務端選擇合適的加密算法、hash算法,將對應的證書發送給客戶端
    • 客戶端驗證證書、生成隨機字符串(用來進行對稱加密)
    • 客戶端生成握手信息,使用Hash算法取Hash、使用隨機字符串加密握手信息和握手信息的hash值( 這里之所以要帶上握手信息的HASH是因為,防止信息被篡改。如果信息被篡改,那么服務端接收到信息進行HASH時,就會發現HASH值和客戶端傳回來的不一樣。這里就保證了信息不會被篡改。)
    • 服務端接收加密信息,解密得到客戶端的隨機字符串,解密握手信息和握手信息hash值,對握手信息進行hash,對比客戶端傳回來的hash
    • 服務端同樣使用隨機字符串加密握手信息和握手信息hash值給客戶端
    • 客戶端驗證服務端的握手信息(同樣通過hash值避免被篡改)
    • 后續:使用隨機字符串進行加密通信

5)https的防劫持

https://www.jianshu.com/p/13a1b955d095

DNS劫持與內容劫持

  • DNS劫持(黑客使用私人服務器與瀏覽器 + 真實服務器  進行連接,作為中間者)一般不會發生,因為黑客需要有CA證書,這個一般不能偽造
    • 除非瀏覽器自身信任、接受了黑客的自簽名證書
  • 內容劫持:作為一個中間人,你沒有服務器私鑰A,是不能解密客戶端發送的內容的,如果你沒有客戶端自己生成的密鑰B,所以你也不能解密客戶端發過去的內容的。

6)http+https的風險

HTTPS只針對傳輸內容進行加密,保證的是客戶端和網站之間的信息就算被攔截也無法破解。 如果不是全站HTTPS,僅僅只是在登錄頁采用HTTPS,那些HTTP連接的頁面同樣是危險的,從HTTP->HTTPS跳轉依然可能被劫持。國內的部分銀行就是這樣,對安全性的考量還比不上百度,百度早就全站HTTPS了。

 


免責聲明!

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



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