什么是HTTPS
HTTPS(全稱: Hyper Text Transfer Protocol over SecureSocket Layer),是以安全為目標的HTTP通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性。HTTPS在HTTP的基礎之上加入SSL,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。HTTPS存在不同于HTTP的默認端口,及一個加密/身份驗證層(在HTTP于TCP之間)。這個系統提供了身份驗證與加密通訊方法。它被廣泛用于萬維網上安全敏感的通訊,例如交易支付等方面。
HTTPS連接建立流程
HTTPS連接建立流程
- Client向Server發送報文,包含TLS版本號,支持的加密算法,隨機數 C。
- Server返回握手報文消息,包含最終決定的加密算法(這個加密算法一定是Client發送給Server加密算法的子集)、隨機數 S、Server數字證書。
- Client驗證Server證書(證書包含的信息有:公鑰、頒發機構、過期時間等)。
- Client生成預設主密鑰(premaster key),再加上隨機數C和隨機數S,按照一定的算法生成會話密鑰。
- Client發送報文給Server,內容包括通過Server的公鑰對預主密鑰進行加密的數據。
- Server通過私鑰解密,得到預主密鑰。
- Server通過隨機數C 、隨機數 S 和預設主密鑰組成會話秘鑰, 跟客戶端會話秘鑰相同。
- Client發送會話秘鑰加密的握手消息,主要驗證服務端是否正常接受客戶端加密的消息。
- 同樣服務端也會通過會話秘鑰加密一條消息回傳給客戶端,如果客戶端能夠正常接受的話表明SSL層連接建立完成了
Charles抓包原理
抓包原理圖
Charles利用HTTPS中間人攻擊的漏洞來做的,Charles是中間人。
- 本地請求被劫持(如DNS劫持等),所有請求均發送到中間人的服務器
- 中間人服務器返回中間人自己的證書
- 客戶端創建隨機數,通過中間人證書的公鑰對隨機數加密后傳送給中間人,然后憑隨機數構造對稱加密對傳輸內容進行加密傳輸
- 中間人因為擁有客戶端的隨機數,可以通過對稱加密算法進行內容解密
- 中間人以客戶端的請求內容再向官方網站發起請求
- 因為中間人與服務器的通信過程是合法的,官方網站通過建立的安全通道返回加密后的數據
- 中間人憑借與官方網站建立的對稱加密算法對內容進行解密
- 中間人通過與客戶端建立的對稱加密算法對官方內容返回的數據進行加密傳輸
- 客戶端通過與中間人建立的對稱加密算法對返回結果數據進行解密
為什么客戶端會信任中間人下發的證書呢?
問題就在與根證書的安裝信任上。
比如在用Charles抓包HTTPS請求時,需要下載Charles的CA根證書,安裝在iPhone手機中,并點擊信任該證書。而Charles下發的證書就是由這個根證書簽發的,手機就會認為其是合法的,因此校驗通過。
手機證書信任設置
參考資料:
《計算機網絡(第5版)》Andrew S. Tanenbaum David J. Wetherall
https協議 和 Charles 進行https抓包原理
《面試官系列 - https 真的安全嗎,可以抓包嗎,如何防止抓包嗎》