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