Androidのプロキシ設定をMacのCharlesに向けて通信をキャプチャする

android

Mac側の設定

Charlesを入れて次の設定を行う。

  • Proxy SettingsでEnable transparent HTTP proxingをオン

Proxy Settings

  • SSH Proxy Settingsのincludeに*:*を追加

SSL Proxy Settings

  • Access Control SettingsにAndroidのローカルIPアドレスを追加

Access Control Settings

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>