google 文檔在關于網(wǎng)絡安全配置說明如下:所有使用TLS和HTTPS的協(xié)議會默認信任所有預安裝的系統(tǒng)CA成玫,也會信任target Android 6.0及以下版本用戶級別添加的CA證書加酵。但7.0及以上需要在代碼中進一步設置才能夠正常抓包,具體如下:
一哭当、先配置一下Charles相關
下載Charles客戶端:https://www.charlesproxy.com
另外需要注意的是猪腕,默認會把證書裝在“登錄”的下面,同樣復制一份到“系統(tǒng)”下才能正常抓包钦勘,也是要始終信任陋葡。
手機和電腦連接同一個wifi彻采,然后在手機連接的這個wifi打開高級設置腐缤,設置代理方式為手動,輸入自己電腦的ip地址肛响,端口號是剛剛設置的8888
另外需要手機要下載一個證書:
二岭粤、項目代碼需要添加如下:
1、app模塊的res文件下新增一個xml文件夾特笋,里面包含一個networkapp_security的xml文件剃浇。
2、networkapp_security_config.xml內(nèi)容如下:
debug—overrides表示只在debug編譯type下開啟證書設置猎物,較為安全虎囚,不影響線上的發(fā)版,也是非常需要設置的蔫磨,不然上線的時候加入忘記注釋掉設置淘讥,容易有安全隱患。
最后在配置文件中加上引用
<application
? android:name="****Application"
? android:networkSecurityConfig="@xml/networkapp_security_config"
? tools:replace="android:allowBackup,android:networkSecurityConfig"
>
3堤如、以上是信任了所有user級別的證書蒲列,容易被惡意的中間人劫持,還有一種寫法:信任具體的某個證書煤惩,可以保護應用程序免受任何其他CA頒發(fā)的欺詐性證書的侵害(例如只信任我自己電腦對應的證書嫉嘀,只有我自己可以抓包炼邀,其他人連接他自己電腦就無法抓包魄揉,安全級別相對更高一些,具體可以看下官網(wǎng)的詳細介紹:https://developer.android.com/training/articles/security-config)
4拭宁、下面我們看下第二種信任指定證書的具體寫法:
(1)res文件下再新增一個raw目錄洛退,并添加pem證書:
(2)pem證書的下載瓣俯,保存到本地,粘貼進raw目錄下
? ? ?(3)修改networkapp_security_config.xml
? ? ? ?三兵怯、測試效果
電腦和手機連接同一wifi彩匕,打開手機當前這個wifi的高級選項,設置代理方式為手動媒区,設置ip地址為電腦的ip驼仪,端口號是剛剛設置的8888;開始測試袜漩,去請求https的接口绪爸,是否可以抓到數(shù)據(jù)包。
期間遇到的問題:最開始我用的是第二種方法宙攻,只信任指定的證書奠货。試了一下,可以抓到包座掘,然后以為能讓所有qa和rd愉快的抓包了递惋,但是qa同學安裝之后,依然抓不到包溢陪,就開始找問題:
首先萍虽,我和qa用的是同一套代碼打得包,我可以抓嬉愧,他們不可以贩挣,懷疑charles配置的問題,電腦端證書没酣、域名配置王财、能重新試的都試了,甚至charles重裝成和我這邊一樣的版本裕便,短短續(xù)續(xù)試了兩周绒净。。偿衰。因為也有正常的工作要做
昨天我看代碼里配置的pem感覺有點問題挂疆,就試著換成第一種寫法,直接信任所有user級別的ca證書下翎,我這邊依然可以抓包缤言,非常激動的去qa同學那里試驗,結(jié)果還是報錯unknown(其實這時候已經(jīng)真的開始懷疑人生了视事,眼前一黑胆萧,被情緒左右啊,其實忘記了重要的一個點俐东,要抓包設備是要安裝和這個qa的電腦對應的證書的跌穗,他們一般經(jīng)常測試订晌,每個測試機基本都有他們那個電腦對應的證書,恰巧這個qa同學他不怎么用Charles蚌吸,用的其他工具锈拨,而換第一種寫法之前每次去qa那里測,都會看下證書有沒有裝羹唠,這次就忘了簡直天意弄人)奕枢。。佩微。验辞。。喊衫。啊西湖的水跌造,我的淚,腦殼痛~~
最后結(jié)論就是:
1族购、就是如果單獨自己抓包測試的話壳贪,就按照第二種寫法,只對自己電腦生效寝杖,因為raw下的pem是自己電腦下載而來的(即使你直接在手機上按照步驟裝了ca證書违施,其實也是忽略了,不會去讀的瑟幕,直接讀raw下面這個了)磕蒲,其他人拿這個包就啥數(shù)據(jù)也抓不了。
2只盹、給項目里所有qa和rd用辣往,就按第一種寫法,打一次包殖卑,大家都可以抓數(shù)據(jù)了
ELSE:如果targetsdkversion指向到28站削,即9.0。而且項目里用了http請求孵稽。會報ssl的錯许起,需要在網(wǎng)絡配置文件里打開clear的設置。參考鏈接:https://www.cnblogs.com/renhui/p/9921790.html