前言
APP端抓包中, 設定抓包代理后會發現部分APP(如app store、Facebook)直接無法訪問,其他部分app又功能正常,為什么呢?這涉及 ssl-pinning,證書鎖定,
證書鎖定(SSL/TLS Pining),顧名思義,將服務器提供的SSL/TLS證書內置到移動端開發的APP客戶端內,當客戶端發起請求時,通過對比內置的證書和服務器端證書的內容,以確定這個鏈接的合法性,
HTTPS與中間人攻擊
HTTPS
- HTTPS實際上是由HTTP協議與TLS協議組合而成的一個協議,
- TLS協議作用于HTTPS建議客戶端與服務端通信建立信任的程序;HTTP協議作用于客戶端與服務端的正式通信程序,二者通信的資料是被TLS協議最終生成的密鑰加密過,
- HTTPS建立連接程序會生成三個亂數,通過這三個亂數,客戶端與服務端能夠使用相同的演算法生成后續HTTP通信程序中對接加密演算法使用的密鑰,
- HTTPS協議中,非對稱加密只是在協議建立的程序,協議建立后使用的是對稱加密,
中間人攻擊
- 市面上的抓包軟體的實作原理就是中間人攻擊,
- TLS建立連接時,客戶端生成的亂數1、服務端生成的亂數2都是明文,只有亂數3使用非對稱加密技術加密,
- 中間人攻擊的關鍵是截獲服務器回傳的證書并偽造證書發送給客戶端騙取信任,獲取亂數3,進而達成盜取資訊的目的,
- 客戶端校驗證書合法性的三種方式(這也是客戶端容易被騙的原因):
- 查看證書是否過期
- 服務器證書上的域名是否和服務器的實際域名相匹配
- 校驗證書鏈 ——因此,中間人攻擊可以在終端手動添加信任根證書,即Charles/Fiddler抓包之前需要安裝證書的原因,
ssl-pinning
1.概述
在公共網路中我們使用安全的SSL/TLS通信協議進行通信,并且使用數字證書來提供加密和認證,HTTPS的握手環節仍然面臨(MIM中間人)攻擊的可能性,因此CA證書簽發機構也存在被黑客入侵的可能性,同時移動設備也面臨內置證書被篡改的風險,
2.證書鎖定原理
證書鎖定(SSL/TLS Pinning)提供了兩種鎖定方式:
- Certificate Pinning,證書鎖定
- Public Key Pinning,公鑰鎖定
2.1 證書鎖定
-
具體操作:將APP代碼內置僅接受指定域名的證書,而不接受作業系統或者瀏覽器內置的CA根證書對應的任何證書,通過這種授權方式,保障了APP與服務端通信的唯一性和安全性,因此移動端APP與服務端(例如API網關)之間的通信可以保證絕對的安全,
-
缺點:CA簽發證書存在有效期問題,在證書續期后需要將證書重新內置到APP內,
2.2 公鑰鎖定
- 具體做法:公鑰鎖定是提前證書中的公鑰并內置到移動端APP內,通過與服務器對比公鑰值來驗證連接的合法性,
- 優點:在制作證書密鑰時,公鑰在證書續期前后可以保持不變(即密鑰對不變),所以可以避免證書有效期問題,
3.證書鎖定指紋(hash)
- 獲取移動端所需證書
- 如果是證書鎖定,即獲取證書的摘要hash
- 獲取移動端所需公鑰
- 如果是公鑰鎖定,則獲取證書公鑰的摘要hash
4.總結
證書鎖定旨在解決移動端APP與服務端通信的唯一性,
- 實際通信程序中,如果鎖定程序失敗,那么客戶端APP將拒絕針對服務端的所有SSL/TLS請求,
- Facebook/Twitter通過證書鎖定以防止Charles/Fiddler等抓包工具的中間人攻擊,
HTTPS入門, 圖解SSL從回車到握手](https://link.zhihu.com/?target=https%3A//www.infinisign.com/faq/ssl-hello-process)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/109078.html
標籤:其他
上一篇:Git上傳到碼云及其常見問題詳解
下一篇:使用博客園寫隨筆時如何添加超鏈接
