白話 HTTPS & SSL/TSL
iOS9蘋果明確強調了操作系統的安全性,其中的做法之一則是網絡請求將從默認的HTTP切換為HTTPS。本文主要描述HTTPS加密的原理和思想。
HTTPS
HTTPS就是將HTTP協議數據包放到SSL/TSL層加密后,在TCP/IP層組成IP數據報去傳輸,以此保證傳輸數據的安全;而對于接收端,在SSL/TSL將接收的數據包解密之后,將數據傳給HTTP協議層,就是普通的HTTP數據。HTTP和SSL/TSL都處于OSI模型的應用層。

SSL/TSL
SSL/TSL協議,主要是在對話建立階段,通過四次握手,在客戶端與服務端生成同樣的秘鑰(對話秘鑰,session key),而后的通信都用這個秘鑰進行加密通信。由于這個秘鑰是對稱加密的,所以加密解密的速度非常快。
如何生成對話秘鑰(session key)
1.客戶端發送請求,其中帶入內容:
- 支持的協議版本,比如TLS 1.0版。
- 一個客戶端生成的隨機數n1,稍后用于生成"對話密鑰"。
- 支持的加密方法,比如RSA公鑰加密。
- 支持的壓縮方法。 </ul>
- 確認使用的加密通信協議版本,比如TLS 1.0版本。如果瀏覽器與服務器支持的版本不一致,服務器關閉加密通信。
- 一個服務器生成的隨機數n2,稍后用于生成"對話密鑰"。
- 確認使用的加密方法,比如RSA公鑰加密。
- 包含公鑰的數字證書 </ul>
- 一個隨機數n3。該隨機數用數字證書公鑰加密,防止被竊聽。
- 編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送。
- 客戶端握手結束通知,表示客戶端的握手階段已經結束。這一項同時也是前面發送的所有內容的hash值,用來供服務器校驗。 </ul>
- 編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送。
- 服務器握手結束通知,表示服務器的握手階段已經結束。這一項同時也是前面發送的所有內容的hash值,用來供客戶端校驗。 </ul>
這里我們關注隨機數n1就好。
2.服務端返回信息,其中內容:
這里我們關注隨機數n2以及數字證書。
3.驗證數字證書的有效性后,客戶端回應,其中內容:
此外,如果第二步中,服務器要求客戶端證書,客戶端會在這一步發送證書及相關信息。這一步我們關注隨機數n3。
4.服務器最后回應,其中內容:
此時客戶端和服務端都有隨機數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