Androidのプロキシ設定をMacのCharlesに向けて通信をキャプチャする
androidMac側の設定
Charlesを入れて次の設定を行う。
- Proxy SettingsでEnable transparent HTTP proxingをオン
- SSH Proxy Settingsのincludeに*:*を追加
- Access Control SettingsにAndroidのローカルIPアドレスを追加
Android側の設定
同じネットワークにつないで詳細設定からMacへプロキシされるようにする。
$ ifconfig en0
...
inet 192.168.11.6
これで適当なHTTPSのページにアクセスするとSSL HandshakeのエラーがCharlesに出るので http://www.charlesproxy.com/getssl にアクセスしてCharles Proxy CAの証明書をインストールする。 証明書はプロファイルに紐づくので、個人用のプロファイルにインストールしても仕事用のプロファイルのアプリでは使われない。
Chromeからの通信はこれで見られるようになるが、
Android 7からはアプリのnetwork-security-config
で信頼した
証明書しか使われないため他のアプリでは大抵Handshakeに失敗する。次のように書くとデバッグ時のみプロキシできるようになる。
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>