Android 7以上的Android 系統(tǒng),App默認(rèn)不信任用戶證書(shū),只信任系統(tǒng)證書(shū).所以,要么在App的manifest上去設(shè)置信任某個(gè)證書(shū),要么就只能把用戶證書(shū)改為系統(tǒng)證書(shū)了. 第一種方法需要修改應(yīng)用,不夠通用,第二種方法只有root的手機(jī)才可以,而且系統(tǒng)版本不能是Android 9系統(tǒng),要不然用戶證書(shū)移到系統(tǒng)證書(shū)目錄,但是一刷新又不見(jiàn)了,原因不明.
具體過(guò)程如下:
第一步,制作證書(shū)
- 先讓手機(jī)root
- 使用chrome瀏覽器下載Charles的證書(shū),例如文件名為: charles-proxy-ssl-proxying-certificate.pem ,然后在電腦上執(zhí)行命令
springs-MacBook-Pro-2:Downloads spring$ openssl x509 -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem
b7dbf359
-----BEGIN CERTIFICATE-----
MIIFNjCCBB6gAwIBAgIGAWHgoF0JMA0GCSqGSIb3DQEBCwUAMIGfMTAwLgYDVQQD
DCdDaGFybGVzIFByb3h5IENBICgxIOS4ieaciCAyMDE4LCBib2dvbikxJTAjBgNV
BAsMHGh0dHBzOi8vY2hhcmxlc3Byb3h5LmNvbS9zc2wxETAPBgNVBAoMCFhLNzIg
THRkMREwDwYDVQQHDAhBdWNrbGFuZDERMA8GA1UECAwIQXVja2xhbmQxCzAJBgNV
BAYTAk5aMB4XDTAwMDEwMTAwMDAwMFoXDTQ3MDQyODA4MTQyMVowgZ8xMDAuBgNV
BAMMJ0NoYXJsZXMgUHJveHkgQ0EgKDEg5LiJ5pyIIDIwMTgsIGJvZ29uKTElMCMG
- 得到的第一行b7dbf359將作為證書(shū)的文件名,將charles的證書(shū)改名為b7dbf359.0,為什么要加.0是因?yàn)榉乐刮募麤_突,如果你的根證書(shū)文件夾里面已經(jīng)有這個(gè)文件名了,那就將.0 改為 .1,以此類推
- 將改名后的證書(shū)放到手機(jī)里面,或者直接把手機(jī)里剛才下載的證書(shū)改名.
第二步,將證書(shū)放入系統(tǒng)證書(shū)目錄(/system/etc/security/cacerts/)
- 系統(tǒng)證書(shū)目錄默認(rèn)是只讀的,所以先要重新掛載一下.
在終端命令行執(zhí)行adb shell 命令進(jìn)入手機(jī)的shell 命令行,這時(shí)看到的應(yīng)該是
變成#.
sagit:/ $ su
sagit:/ # mount -o ro,remount /system
- 將剛才的證書(shū)文件拷貝到系統(tǒng)證書(shū)目錄.
sagit:/ # cp /sdcard/b7dbf359.0 /system/etc/security/cacerts
- 修改一下這個(gè)證書(shū)文件的權(quán)限,重新將system目錄設(shè)為只讀,然后退出重啟
sagit:/ # chmod 644 /system/etc/security/cacerts/b7dbf359.0
sagit:/ # mount -o ro,remount /system
sagit:/ # exit
springs-MacBook-Pro-2:Downloads spring$ adb reboot
到此,證書(shū)導(dǎo)入完成,可以盡情抓包了.