白話 HTTPS & SSL/TSL

w8383 9年前發布 | 13K 次閱讀 HTTPS 安全相關

iOS9蘋果明確強調了操作系統的安全性,其中的做法之一則是網絡請求將從默認的HTTP切換為HTTPS。本文主要描述HTTPS加密的原理和思想。


HTTPS

HTTPS就是將HTTP協議數據包放到SSL/TSL層加密后,在TCP/IP層組成IP數據報去傳輸,以此保證傳輸數據的安全;而對于接收端,在SSL/TSL將接收的數據包解密之后,將數據傳給HTTP協議層,就是普通的HTTP數據。HTTP和SSL/TSL都處于OSI模型的應用層。

白話 HTTPS & SSL/TSL

HTTPS
</div>

SSL/TSL

SSL/TSL協議,主要是在對話建立階段,通過四次握手,在客戶端與服務端生成同樣的秘鑰(對話秘鑰,session key),而后的通信都用這個秘鑰進行加密通信。由于這個秘鑰是對稱加密的,所以加密解密的速度非常快。

如何生成對話秘鑰(session key)

1.客戶端發送請求,其中帶入內容:

  • 支持的協議版本,比如TLS 1.0版。
  • 一個客戶端生成的隨機數n1,稍后用于生成"對話密鑰"。
  • 支持的加密方法,比如RSA公鑰加密。
  • 支持的壓縮方法。
  • </ul>

    這里我們關注隨機數n1就好。

    2.服務端返回信息,其中內容:

    • 確認使用的加密通信協議版本,比如TLS 1.0版本。如果瀏覽器與服務器支持的版本不一致,服務器關閉加密通信。
    • 一個服務器生成的隨機數n2,稍后用于生成"對話密鑰"。
    • 確認使用的加密方法,比如RSA公鑰加密。
    • 包含公鑰的數字證書
    • </ul>

      這里我們關注隨機數n2以及數字證書。

      3.驗證數字證書的有效性后,客戶端回應,其中內容:

      • 一個隨機數n3。該隨機數用數字證書公鑰加密,防止被竊聽。
      • 編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送。
      • 客戶端握手結束通知,表示客戶端的握手階段已經結束。這一項同時也是前面發送的所有內容的hash值,用來供服務器校驗。
      • </ul>

        此外,如果第二步中,服務器要求客戶端證書,客戶端會在這一步發送證書及相關信息。這一步我們關注隨機數n3。

        4.服務器最后回應,其中內容:

        • 編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送。
        • 服務器握手結束通知,表示服務器的握手階段已經結束。這一項同時也是前面發送的所有內容的hash值,用來供客戶端校驗。
        • </ul>

          此時客戶端和服務端都有隨機數n1,n2,n3三個隨機數,客戶端和服務端用商定的算法利用3個隨機數生成一個對話秘鑰(session key),隨后的通信就用這個秘鑰進行加密解密,保證通信過程不被別人監聽或者竄改。所以唯一的風險點在于這個對話秘鑰是否會被竊取,竊取的唯一方式也就是身份冒充,在上述四次握手階段中竊取到對話秘鑰。

          如何防止身份冒充

          1.冒充服務端

          服務端有權威機構簽名的數字證書,證書中帶有公鑰。所以:1.竄改公鑰會破壞數字證書,客戶端驗證證書有效性便可確認;2.就算竊取到證書后偽裝成服務端與用戶通信,沒有私鑰就無法解密出隨機數n3,也就無法利用n1,n2,n3生成對話秘鑰,沒有對話秘鑰也就無法解密用戶發送的數據包。

          2.冒充客戶端

          對于有權限限制的服務,往往會要求驗證客戶端身份,這時一般使用客戶端證書。由于客戶端證書要發送到服務器進行驗證,所以要么通信過程是加密的,要么客戶端證書是動態的(即限制冒充者使用竊聽得到的證書的使用時間,例如30秒,這樣在冒充者真正竊取到證書的時候,多半證書已經過期了。服務器會知道這個動態的算法,所以能實時驗證證書。例如U盾。),否則證書是可以偽造出來或者復制下來的。


          本文部分內容摘抄于阮一峰的技術博客:SSL/TLS協議運行機制的概述

          </div> 來自: http://www.jianshu.com/p/992bad24412e

 本文由用戶 w8383 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!