私鑰、公鑰與https


HTTP的安全缺陷

  • 通信內容不加密,導致被竊聽
  • 不驗證客戶端和服務端的身份,導致:
    • 服務器偽裝
    • 響應返回到了其他的客戶端
    • 海量惡意連接
  • 無法證明報文的完整性,導致:請求和響應內容被篡改,這稱為中間人攻擊

公鑰加密技術

  • 使用私鑰加密的內容,使用公鑰解密,反之,使用公鑰加密的內容,使用私鑰解密
  • 服務器生成公鑰和私鑰,私鑰自己保存,公鑰對外公開
  • 客戶端發送請求之前,使用公鑰進行加密——由於私鑰是服務器私有,即使被截獲也無法解密
  • 反過來,服務器發送響應之前:
    • 對消息執行hash算法,生成摘要
    • 對摘要使用私鑰加密,生成數字簽名
    • 將消息和數字信息一起發送到客戶端
    • 客戶端用公鑰解密數字簽名,得到摘要
    • 客戶端對消息執行hash算法,與摘要比對,驗證消息的真偽
    • 如果消息被截獲,摘要被解密,由於沒有私鑰,也就無法生成能用公鑰解密的摘要,這樣就保證了消息的正確性、完整性,以及服務器的真實性。
  • 該過程的漏洞在於:如何防止有人篡改公鑰,也就是如何保證公鑰的真實性
    • 解決:通過CA(數字證書認證),將服務器公鑰、用到的hash算法、CA機構信息等,通過CA的私鑰加密成數字證書
    • 之后服務器發送的消息,都附上數字證書
    • 瀏覽器收到數字證書,用CA的公鑰解密,拿到服務器的公鑰
    • 再將機構信息與本機機構列表比對,驗證公鑰的真實性
    • 如果有人偽造公鑰,甚至獲得了CA的私鑰,其證書中的信息、hash算法等內容也很難與真實網站完全一致。

SSL和HTTPS

  • 上述過程僅單向安全,用私鑰加密的信息,也就是服務器發出的信息不安全
    • 解決辦法:先用上述流程驗證公鑰的真實性,這個過程稱為握手
    • 在客戶端生成隨機對稱密鑰
    • 對密鑰用公鑰加密,發送到服務端,這樣就保證了密鑰傳輸的安全性
  • 之后全部雙向傳輸都使用對稱密鑰加密解密
HTTPS建立連接的流程
  • 上述過程就是SSL
  • HTTP+SSL/TLS=HTTPS


免責聲明!

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



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