前言
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創建鏈接時,客戶端生成的隨機數一、服務端生成的隨機數2都是明文,只有隨機數3使用非對稱加密技術加密。
- 中間人攻擊的關鍵是截獲服務器返回的證書並僞造證書發送給客戶端騙取信任,獲取隨機數3,進而達成盜取信息的目的。
- 客戶端校驗證書合法性的三種方式(這也是客戶端容易被騙的緣由):
- 查看證書是否過時
- 服務器證書上的域名是否和服務器的實際域名相匹配
- 校驗證書鏈 ——所以,中間人攻擊能夠在終端手動添加信任根證書,即Charles/Fiddler抓包以前須要安裝證書的緣由。
ssl-pinning
1.概述
在公共網絡中咱們使用安全的SSL/TLS通訊協議進行通訊,而且使用數字證書來提供加密和認證。HTTPS的握手環節仍然面臨(MIM中間人)攻擊的可能性,所以CA證書籤發機構也存在被黑客入侵的可能性,同時移動設備也面臨內置證書被篡改的風險。安全
2.證書鎖定原理
證書鎖定(SSL/TLS Pinning)提供了兩種鎖定方式:服務器
- Certificate Pinning,證書鎖定
- Public Key Pinning,公鑰鎖定
2.1 證書鎖定
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)加密