ios用到的工具:
ssl kill switch
Fiddler
兩個工具的安裝辦法:
越獄的IOS上面安裝ssl kill switch
之前一直抓的是 ios的 https數據包,雙向證書認證
對於安卓的沒使用過,今天看到了,收藏一下
=====================================
0x02 雙向證書認證與解決方法
在對soulApp進行抓包的時候,提示網絡錯誤,請檢查網絡后重試~
本來以為直接把這個okhttp的證書hook修改成系統默認的即可,就沒有詳細說明這一部分,結果有網友問雙向證書認證這部分是如何處理的,就詳細來說明一下如何處理。這里時由於采用了雙向證書認證的緣故,所以抓包返回400錯誤,直接瀏覽器訪問https://account.soulapp.cn/ ,也是不行的
提示No required SSL certificate was sent.
如果要訪問成功,就要帶上證書。
關於雙向證書認證:客戶端有自己的密匙,並持有服務端的證書,服務端給客戶端發送數據時,需要將服務端的證書發給客戶端驗證,驗證通過才運行發送數據,同樣,客戶端請求服務器數據時,也需要將自己的證書發給服務端驗證,通過才允許執行請求。詳細的內容可以參考https://blog.csdn.net/enweitech/article/details/53813183。
我們本地來測試一下,簡單介紹一下如何搭建雙向證書認證環境。
1.雙向證書認證服務器的搭建
創建一個證書的步驟:
(1)生成系統私鑰
(2)生成待簽名證書
(3)生成x509證書, 用CA私鑰進行簽名
證書的生成過程略。
以tomcat服務器為例。將生成的服務端證書server.p12
和客戶端信任證書truststore.jks
放入conf目錄下。修改tomcat下conf/server.xml文件,去掉https的注釋。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" |
修改為
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" |
此時
clientAuth="false"
,未開啟客戶端校驗。
啟動服務器並訪問。
雖然提示錯誤但是點繼續前往即可訪問。
設置開啟客戶端校驗,即clientAuth="true"
然后重啟后訪問
無法正常訪問,想要正常訪問,瀏覽器導入證書即可
下一步然后輸入密碼
刷新頁面,提示選擇證書。
確定后即可訪問。
2.soulAPP雙向認證解決方法
同理這里soulApp也可以這樣做。
這里列舉三種方法來完成客戶端的驗證。歸根結底都是證書的利用。
a)瀏覽器導入證書
利用soulApp中的證書和密碼生成瀏覽器證書。
openssl pkcs12 -export -inkey client.key -in client.crt -out soulclient.pfx |
證書的位置位於資源文件assets中。
標記的1處輸入的是soul證書的密碼,2和3為證書導入瀏覽器自己設置的密碼,這里為123456
然后導入瀏覽器,重新訪問https://account.soulapp.cn/
選擇證書后確定。
根據頁面顯示內容可以發現此時導入證書后可以正常訪問。
b)利用程序完成認證
利用程序的話,參考cn.soulapp.android.api.e.a()
方法,進行證書的操作。
精簡之后主要代碼如下:
然后利用httpclient進行http請求。
當訪問不加證書的效果:
使用證書的結果:
由於這是這是之前的數據包,所以已經過期,再次使用需要更換時間戳和簽名,但結果成功的。
c)利用抓包工具
使用抓包工具,這里以burp為例。
未導入證書抓包結果:
提示400錯誤,我們在burp中導入證書
選擇證書並輸入密碼。
證書導入成功。
再次抓包
已經可以正常抓取了。
當然使用其他方法也是可行的,這里就不再列舉了。
0x03 總結
本文主要是為了解決APP與服務器之間的雙向證書認證問題,沒有太多的技巧,主要就是證書的使用。如果服務器采用了雙向認證,那么一般在APP中有證書和證書密碼的存在,找到之后導入抓包工具即可。