Android7以上(compileSdkVersion:24以降)でも通信をCharlesで確認できるようにする設定を備忘録として記載しようと思います。
#準備
予め下記の設定を行い、セキュリティ構成ファイルの追加を行って下さい。
1.AndroidManifest.xmlに下記を書き足す。
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
2.セキュリティ構成ファイルとしてnetwork_security_config.xmlを下記のようなディレクトリになるように作成する。
res/xml/network_security_config.xml:
あとは下記から自分の用途にあったセキュリティの設定を行い、Android7以上端末でも通信をCharlesでも確認できるようにします。
#デバック時のみ確認を行う場合
デバック時にどの端末でも確認できるようにしたい場合はnetwork_security_config.xmlを下記のようにして下さい。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system"/>
</trust-anchors>
</base-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
#Charlesの独自証明書をインストールした端末のみ確認を行う場合
デバック時にCharlesが発行した独自証明書がインストールされた端末のみ通信を確認ができるようにする場合は下記のようにして下さい。
1.まずはCharlesのメニューからhelp→SSL Proxying→Save Charles Root Certificateを選択し証明書を保存して下さい。
2.保存した証明書を「charles_ssl_proxying_certificate」というファイル名に変更して下記のようなディレクトリになるように追加して下さい。
res/raw/charles_ssl_proxying_certificate:
(※ファイル名に「-」が使えない点と、追加時に拡張子を付けないように気をつけて下さい)
3.最後にnetwork_security_config.xmlを下記のようにしてデバック時に追加した証明書を信頼するように設定します。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system"/>
</trust-anchors>
</base-config>
<debug-overrides>
<trust-anchors>
<certificates src="@raw/charles_ssl_proxying_certificate"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
#Android6以前のようにリリース時も確認できるようにする方法
デバック時リリース時の両方で確認が行えるようにしたい場合はnetwork_security_config.xmlを下記のように設定して下さい。
(※リリース時でも確認できるようになってしまう分、セキュリティ面では弱くなってしまいます)
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system"/>
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>