- 首先苦蒿,設(shè)置手機(jī)的網(wǎng)絡(luò)連接電腦共享wifi殴胧,同時(shí)設(shè)置端口號(hào);
- 其次佩迟,涉及到https抓包時(shí)团滥,需要設(shè)置手機(jī)安裝和信任ssl證書(shū),以及設(shè)置Charles中ssl的配置音五。
一惫撰、下載與安裝
Charles:charles-proxy-3.10.2.dmg
javaSDK:javaforosx.dmg
二、網(wǎng)絡(luò)環(huán)境與手機(jī)的配置
1躺涝、開(kāi)啟電腦共享wifi厨钻,同時(shí)設(shè)置主機(jī)代理與端口號(hào)
(1)系統(tǒng)偏好設(shè)置——>共享——>互聯(lián)網(wǎng)共享;
(2)系統(tǒng)偏好設(shè)置——>網(wǎng)絡(luò)——>以太網(wǎng)——>高級(jí)——>DHCP客戶端ID(默認(rèn)8888)坚嗜;
2夯膀、設(shè)置手機(jī)代理
(1)查看IP地址:終端命令ifconfig查看,或系統(tǒng)偏好設(shè)置——>網(wǎng)絡(luò)——>以太網(wǎng)——>IP地址
(2)設(shè)置——>wifi或無(wú)線局域網(wǎng)——>已連接共享wifi名稱——>HTTP代理——>手動(dòng)——>服務(wù)器(電腦ip地址)苍蔬、端口(8888)诱建;
三、抓包
1碟绑、http抓包
可以清楚的查看到發(fā)送的請(qǐng)求頭信息俺猿,以及服務(wù)器返回的沒(méi)有加密處理的明文信息。
(1)查看請(qǐng)求信息:Structure-Request
(2)查看返回信息:Structure-Response-Text格仲,或JSON
2押袍、https抓包
注意:主要是配置手機(jī)端和Charles端的SSL證書(shū)。
HTTPS(Hyper Text Transfer Protocol Secure)凯肋,是一種基于SSL/TLS的HTTP谊惭,所有的HTTP數(shù)據(jù)都是在SSL/TLS協(xié)議封裝之上進(jìn)行傳輸?shù)摹TTPS協(xié)議是在HTTP協(xié)議的基礎(chǔ)上,添加了SSL/TLS握手以及數(shù)據(jù)加密傳輸圈盔,也屬于應(yīng)用層協(xié)議豹芯。所以,研究HTTPS協(xié)議原理驱敲,最終就是研究SSL/TLS協(xié)議铁蹈。
HTTPS是通過(guò)一次非對(duì)稱加密算法(如RSA算法)進(jìn)行了協(xié)商密鑰的生成與交換,然后在后續(xù)通信過(guò)程中就使用協(xié)商密鑰進(jìn)行對(duì)稱加密通信众眨。
Charles抓HTTPS包原理
Charles本身是一個(gè)協(xié)議代理工具木缝,如果只是普通的HTTP請(qǐng)求,因?yàn)閿?shù)據(jù)本身沒(méi)經(jīng)過(guò)再次加密围辙,因此作為代理可以知道所有客戶端發(fā)送到服務(wù)端的請(qǐng)求內(nèi)容以及服務(wù)端返回給客戶端的數(shù)據(jù)內(nèi)容我碟,這也就是抓包工具能夠?qū)?shù)據(jù)傳輸內(nèi)容直接展現(xiàn)出來(lái)的原因。對(duì)于HTTPS請(qǐng)求姚建,4矫俺,6,8步驟的數(shù)據(jù)都已經(jīng)經(jīng)過(guò)了加密掸冤,代理如果什么都不做的話是無(wú)法獲取到其中的內(nèi)容的厘托。為了實(shí)現(xiàn)這個(gè)過(guò)程的數(shù)據(jù)獲取,Charles需要做的事情是對(duì)客戶端偽裝服務(wù)端稿湿,對(duì)服務(wù)端偽裝客戶端铅匹,具體截獲真實(shí)客戶端的HTTPS請(qǐng)求,偽裝客戶端向真實(shí)服務(wù)端發(fā)送HTTPS請(qǐng)求接受真實(shí)服務(wù)器響應(yīng)饺藤,用Charles自己的證書(shū)偽裝服務(wù)端向真實(shí)客戶端發(fā)送數(shù)據(jù)內(nèi)容一般情況下HTTPS中是客戶端對(duì)服務(wù)端做證書(shū)校驗(yàn)包斑,當(dāng)然也有一些金融機(jī)構(gòu)會(huì)有用戶證書(shū)作為提供給服務(wù)端做用戶認(rèn)證的工具,保證發(fā)出請(qǐng)求的的確是這部分授權(quán)用戶涕俗。我們僅分析客戶端對(duì)服務(wù)單做證書(shū)校驗(yàn)的這種罗丰。Android有自己的一套HTTPS通信調(diào)用方式,以HttpsURLConnection為例
URL url = new URL(“https://wikipedia.org”);
URLConnection urlConnection = url.openConnection();
InputStream in = urlConnection.getInputStream();
copyInputStreamToOutputStream(in, System.out);
上面這段代碼就是一個(gè)https請(qǐng)求的樣例再姑,這種方法的特點(diǎn)是證書(shū)校驗(yàn)工作交由系統(tǒng)處理萌抵,系統(tǒng)只會(huì)允許可信CA簽發(fā)的數(shù)字證書(shū)能夠訪問(wèn),私有CA簽發(fā)的數(shù)字證書(shū)(比如12306以及我們上文說(shuō)的Charles證書(shū))是無(wú)法訪問(wèn)的元镀。
訪問(wèn)方法1:修改Https通信代碼绍填,這種只對(duì)開(kāi)發(fā)者開(kāi)發(fā)應(yīng)用的時(shí)候好使,我們需要實(shí)現(xiàn)X509TrustManager接口去做自己的一套證書(shū)校驗(yàn)栖疑,它并不通用讨永,尤其是對(duì)于我們抓包而言是不可行的,因?yàn)槲覀儧](méi)法去修改別人應(yīng)用中的代碼蔽挠。
訪問(wèn)方法2:將私有CA簽發(fā)的數(shù)字證書(shū)安裝到手機(jī)中并且作為受信任證書(shū)保存住闯,這種方式是我們推薦的方式,唯一的缺點(diǎn)是你的手機(jī)上可能會(huì)在通知欄一直留著一個(gè)特殊標(biāo)志澳淑,告訴你網(wǎng)絡(luò)可能被監(jiān)控比原。
(1)手機(jī)端配置證書(shū)
通過(guò)手機(jī)瀏覽器打開(kāi)網(wǎng)址:http://charlesproxy.com/getssl
注意:安裝后ssl證書(shū)后,還需要主動(dòng)設(shè)置信任(設(shè)置——>通用——>關(guān)于本機(jī)——>證書(shū)信任設(shè)置)
(2)pc端Charles配置證書(shū)
注意:
(1)未設(shè)置前https的標(biāo)識(shí)都是有個(gè)加鎖有標(biāo)識(shí)
(2)Host設(shè)置杠巡,如果不知道具體的API地址時(shí)量窘,可設(shè)置為星號(hào)" * "
(3)Port設(shè)置,設(shè)置時(shí)Port默認(rèn)都是443
https請(qǐng)求及返回的信息未設(shè)置ss證書(shū)時(shí)氢拥,抓包數(shù)據(jù)均是亂碼蚌铜,且接口API標(biāo)識(shí)為黃色警告;設(shè)置ssl證書(shū)后嫩海,則能正常顯示冬殃。