最近在開發(fā)一個錢包應用肺孵,為了安全,和服務器的通信都是使用https颜阐,使用https的時候平窘,會有兩個問題,第一個是抓包問題凳怨,第二個是安全問題瑰艘,本文會嘗試討論一下相關問題的解決方法。
抓包問題的解決
調試問題主要分為 https 如何抓包猿棉,這個在 mac 上使用 charles磅叛,windows上使用 findler,本來這個沒啥好寫的萨赁,但是因為在 Android 上搞了幾個小時才搞定弊琴,所以記錄一下遇到的坑。
先來看看效果杖爽,下圖的火幣app的請求
下圖是微信的請求敲董,微信有的數據有特殊的格式紫皇,不是明文
再看一個微信的明文請求
android上遇到的坑
網上大部分的流程如下:
-
mac 安裝 charles 證書
安裝證書 -
mac 上信任證書
mac上信任證書 -
這時候已經可以抓本發(fā)送的https請求了腋寨,設置一下 macOS Proxy
設置macOS Proxy
由于我們想抓手機或者遠程機器的https聪铺,所以還需要設置一下遠程的機器信任 Charles 證書
-
把 Charles 設置為 http,socks 代理
設置代理 -
設置 Charles 攔截的 https 模式
為了簡便萄窜,全部攔截 電腦和手機都連接到一個網絡
-
手機設置代理铃剔,地址就是剛才 Charles 那邊設置的
小米mix2設置代理
由于Android每個牌子的手機設置方法不一樣,不知道的可以去網上搜查刻。
- 手機安裝 Charles 證書
這一步也比較坑键兜,我是通過 android studio 把證書文件推到手機的,也可以用adb push穗泵。
推到手機手普气,我的小米手機并不能安裝,需要開啟一個叫“文檔”的應用佃延,具體方法看這個連接
開啟“文檔”應用后现诀,就可以“設置 > 更多設置(系統(tǒng)和設備) > 系統(tǒng)安全 > 從存儲設備安裝”
按照道理,這一步走完履肃,完全應該可以抓到手機https的請求了仔沿,但是我的小米mix2是不行的。
-
App 內配置信任 Charles
由于我的 App 不知道是什么原因,https 經過Charles后,一直會顯示沒有配置證書融求,我懷疑是我的 App 是只支持 Android6 以上磷蛹,而這個版本以上是不會默認信任系統(tǒng)證書的,所以我只能去在App里面設置信任Charles抖坪。這一步如果哪位大神明確知道原因請留言告訴我萍鲸。
App沒有使用 Charles 證書發(fā)送請求給代理
至于如何在 App 內部設置使用 Charles 證書,請看這個文檔: security-config
這下終于成功了擦俐。脊阴。。
Certificate Pinning
使用 https 的 App蚯瞧,往往還需要設置一個 Certificate Pinning嘿期,可以進一步增強安全性,基本原理就是埋合,App只信任特定的證書备徐,這樣像 charles 這樣的中間人就沒法劫持數據了。
設置方法可以看如下文檔甚颂。
https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning.
android是需要增加一個network_security_config.xml文件蜜猾。上面security-config的鏈接里面也有說明秀菱。
總結
本文說明如何調試https請求,并用Android的一個App做為demo說明如何配置蹭睡。最后給出了一個增強安全性的方案衍菱,增加Certificate Pinning。
Charles和Findler這一類工具還可以做更多的功能肩豁,比如模擬網絡很慢的情況脊串,修改發(fā)送的數據,性能測試等清钥,是安生立命的好東西 :)琼锋。
參考文檔
https://www.charlesproxy.com/
https://developer.android.com/training/articles/security-config
https://segmentfault.com/a/1190000011573699
https://jingyan.baidu.com/article/acf728fd733db9f8e510a395.html