PC端:
Linux:
1. 官網(wǎng)下載壓縮包, 直接可以運(yùn)行. 另外激活可以自己找辦法啦
2. Help >> SSL Proxying >> Install Charles Root Certificate
這時(shí)候會(huì)發(fā)現(xiàn), 沒(méi)法直接Import, 如果這樣, 需要我們手動(dòng)導(dǎo)入證書(shū)到操作系統(tǒng), 具體步驟如下:
(1) home目錄下,找到.charles/ca/文件夾,?找到charles-proxy-ssl-proxying-certificate.cer和charles-proxy-ssl-proxying-certificate.pem兩個(gè)文件
(2)?轉(zhuǎn)換格式:終端中執(zhí)行
openssl?x509?-outform?der?-in?charles-proxy-ssl-proxying-certificate.pem?-out?charles-proxy-ssl-proxying-certificate.crt
(3)?在/usr/share/ca-certificates文件夾下新建一個(gè)目錄charles淀弹,再將轉(zhuǎn)換格式后得到的證書(shū)charles-proxy-ssl-proxying-certificate.crt復(fù)制到/usr/share/ca-certificates/charles 中
(4)?在/etc/ca-certificates.conf這個(gè)配置文件的最后追加charles/charles-proxy-ssl-proxying-certificate.crt密浑,用sudo update-ca-certificates更新證書(shū)金赦,完成后發(fā)現(xiàn)/etc/ssl/certs目錄中應(yīng)該多了一個(gè)charles-proxy-ssl-proxying-certificate.pem文件跷究,表示成功
(5)?在Charles中Proxy -> SSL Proxying Settings -> SSL Proxy中的include這一欄,? Add一個(gè)Host為*,Port為443的Location,主要是用來(lái)代理所有的HTTPS請(qǐng)求
3: Proxy >> Proxy Settings
默認(rèn)HTTP Proxy的端口是8888,? 但是如果這個(gè)端口被占用了, 需要自己修改一下, 比如9998
Mac Book:?
沒(méi)有具體操作, 如果也需要手動(dòng)導(dǎo)入, 具體流程都大同小異
Android端:
由于安卓版本的不同, 默認(rèn)的網(wǎng)絡(luò)配置是不一樣的:
以 Android 9(API 級(jí)別 28)及更高版本為目標(biāo)平臺(tái)的應(yīng)用的默認(rèn)配置如下所示:
? <base-config cleartextTrafficPermitted="false">? ? ? ?
????????<trust-anchors>? ? ? ? ? ?
????????????????<certificates src="system" />? ? ?
????????? </trust-anchors>? ?
</base-config>
更多配置信息可以見(jiàn):?網(wǎng)絡(luò)安全配置
1. 所以通常, 我們APP的配置可以這樣寫(xiě):
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<!--debug模式般甲,可以使用用戶(hù)自己安裝的正式,比如charles抓包安裝的證書(shū)鹅颊, 這個(gè)配置只在 android:debuggable 為 "true" 時(shí)將應(yīng)用的重寫(xiě) IDE 和構(gòu)建工具生成的非發(fā)布版本通常屬于此情況-->
<debug-overrides>
<!-- Trust user added CAs while debuggable only -->
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
對(duì)于沒(méi)有root的手機(jī), 建議設(shè)置成如上, 其實(shí)就是debug下信任用戶(hù)安裝的證書(shū), https設(shè)置成明文
2. 非root的手機(jī)安裝用戶(hù)證書(shū):
這一步比較簡(jiǎn)單, 只需要把手動(dòng)安裝到Linux PC的證書(shū), adb push到手機(jī)的SD卡, 文件管理中點(diǎn)擊安裝即可
3. 手機(jī)設(shè)置網(wǎng)絡(luò)代理:
打開(kāi)WiFi網(wǎng)絡(luò), 確保和PC連接在同一個(gè)網(wǎng)段的網(wǎng)絡(luò)
進(jìn)入連接好的網(wǎng)絡(luò)的設(shè)置頁(yè)面, 找到代理這一欄, 改為手動(dòng), 填寫(xiě)PC的IP地址, 端口號(hào)是我們上一步驟中自己設(shè)置的端口. 最后點(diǎn)擊保存,稍等一會(huì), PC端會(huì)彈出對(duì)話(huà)框, 我們點(diǎn)擊接受即可
到此為止, 我們自己的APP就可以抓取數(shù)據(jù)了
4. 對(duì)于Root后的手機(jī), 我們可以選擇安裝系統(tǒng)證書(shū)
這樣, 所有的APP我們都可以抓取數(shù)據(jù)了, 并且不受<network-security-config>的配置影響
安裝步驟如下:
# 以 root 權(quán)限執(zhí)行
adb root
# 重新掛載
adb remount
# 解決目錄 read only 關(guān)鍵命令行
adb disable-verity
# 重啟 adb reboot
# 以 root 權(quán)限運(yùn)行
adb root
# 重新掛載
adb remount
# 設(shè)置讀寫(xiě)
adb shell mount -o rw,remount /system
準(zhǔn)備證書(shū):
# 以下執(zhí)行命令都是以證書(shū)文件在當(dāng)前目錄為前提
#??<Certificate_File> 使用?charles-proxy-ssl-proxying-certificate.pem
通過(guò)下面的命令會(huì)獲取到證書(shū)的hash值, 然后復(fù)制?charles-proxy-ssl-proxying-certificate.crt 為?<Certificate_Hash.0>
至于為什么要加一個(gè).0? ?因?yàn)閔ash值是有可能重復(fù)的, 如果重復(fù),則需要累加此值
# 計(jì)算 Certificate_Hash 命令
openssl x509 -subject_hash_old -in <Certificate_File_pem>
# 重命名 `<Certificate_File_crt>` 為 `<Certificate_Hash.0>`
mv <Certificate_File> <Certificate_Hash.0>
最后,?安裝證書(shū)到安卓系統(tǒng)證書(shū)目錄 /system/etc/security/cacerts
# 安裝命令
adb push <Certificate_Hash>.0 /system/etc/security/cacerts