Android Charles 安裝證書, 抓包

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容