前言
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)
作者:AmyZYX
出處:http://www.cnblogs.com/amyzhu/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。