ネットワークプロキシ
開発者ツールメニューには、[ネットワークプロキシ] オプションがあり、HTTPトラフィックを検査できます。アプリがリモートサービスやウェブサイトと通信を行う場合、生成されるHTTPトラフィックやHTTPSトラフィックを検査できると便利です。これには、アプリが開始するリクエストとアプリが受け取るレスポンス、Cookieとキャッシュ情報などを含むHTTPヘッダーが含まれます。
ネットワークプロキシ
アプリがリモートサービスまたはウェブサイトと通信を行う場合、生成されるHTTPまたはHTTPSトラフィックを検査できると便利です。これには、アプリが開始するリクエストとアプリが受け取るレスポンス、Cookieとキャッシュ情報などを含むHTTPヘッダーが含まれます。
[ネットワークプロキシ] オプションを使用すると、すべてのネットワークトラフィックが通過するプロキシのホスト名とポートを指定でき、アプリとの間で送受信されるデータを監視できます。プロキシホストとFire TVが同じネットワークに接続されている必要があります。
Charles Proxyを使用したHTTPSおよび暗号化データの操作
機密情報を扱うアプリでは、通常HTTPS接続を利用して、通信傍受や中間者攻撃からデータを保護します。この場合、送信元と送信先間のトラフィックがSSLで暗号化され、機密性が保たれます。[ネットワークプロキシ] オプションで構成したプロキシであっても、データにはアクセスできません。
一部のプロキシはSSL Proxyingをサポートしているため、暗号化されている場合でもネットワークトラフィックを表示できます。Charles Proxyユーティリティは、この機能を提供する有名なユーティリティです。アプリがリモートサーバーと通信しようとすると、Charles Proxyはサーバー証明書をインターセプトし、独自の証明書を動的に生成して署名します。この代替証明書を使用してアプリとの安全な接続を確立し、受信した元のサーバー証明書を使用してリモートサイトに安全に接続します。これにより、アプリとSSLウェブサーバー間の通信をプレーンテキストで表示できます。
Charles ProxyのSSL Proxying機能をアプリで利用するには、Charles Proxyが生成した代替証明書に署名する認証局(Charles CA)を信頼する必要があります。Fire OS 5では、すべてのアプリがデバイスレベルでインストールされた証明書を暗黙的に信頼するため、デバイスに証明書をインストールするだけで十分です。Fire OS 6では、res/xml/network_security_config.xml
で、信頼する証明書をアプリごとに明示的に指定する必要があります。
テストデバイスにインストールされているFire OSのバージョンを確認するには、[設定] > [My Fire TV] > [バージョン情報] > [Fire TV] の順に選択し、[ソフトウェアのバージョン] の詳細を確認します。また、Fire TVデバイスおよび対応するFire OSのバージョンの一覧も確認できます。
以下の手順では、Charles Proxyが既にインストールされて構成済みであることを前提としています。このアプリを初めて使用する場合は、Charlesのドキュメント(英語のみ)を参照してください。
Charles CAをFOS 5で信頼する方法
- Charles Proxyアプリ内からPEM形式の証明書ファイルを取得します。メニューで [Help] > [SSL Proxying] > [Save Charles Root Certificate…] の順に選択します。
- 証明書ファイルをFire TVデバイスにアップロードします。
adb push charles-ssl-proxying-certificate.pem /storage/emulated/0/Download
- アップロードしたファイルの [証明書インストーラー] ダイアログを開きます。
adb shell am start -a "android.intent.action.VIEW" -d "file:///storage/emulated/0/Download/charles-ssl-proxying-certificate.pem" -t "application/x-x509-ca-cert"
-
わかりやすい名前を指定し、[認証情報の使用] で [VPNとアプリ] が選択されていることを確認します。
- [OK] を選択して証明書をインストールします。Amazonの認証情報を使用して認証するよう求められます。成功すると、画面上に通知が表示されます。
Charles CAをFOS 6で信頼する方法
- 上記のFOS 5と同様に、証明書ファイルを取得してインストールします。
-
Androidプロジェクトの
AndroidManifest.xml
を更新し、ネットワークセキュリティ構成ファイルを追加します。<?xml version="1.0" encoding="utf-8"?> <manifest ... > <application android:networkSecurityConfig="@xml/network_security_config" ... > ... </application> </manifest>
- IDEやビルドツールでこのフラグが自動的に設定されない場合は、
要素に android:debuggable="true"
を追加します。構成方法の詳細については、デバッグ用のCAを構成するを参照してください。 -
次の
res/xml/network_security_config.xml
をAndroidプロジェクトに追加して、インストールされているすべての証明書を明示的に信頼します。<?xml version="1.0" encoding="utf-8"?> <network-security-config> <debug-overrides> <trust-anchors> <!-- デバッグ可能な場合にのみ以下のCAを信頼します --> <certificates src="user"/> </trust-anchors> </debug-overrides> </network-security-config>
または
- 上記のFOS 5と同様に証明書ファイルを取得しますが、デバイスにはインストールしません。
- 代わりに、証明書ファイルをアプリに直接埋め込みます(Androidプロジェクトの
res/raw
サブディレクトリに証明書ファイルをコピーします)。必要に応じてファイル名を変更できます(res/raw/my_ca
など)。 -
上記のように、Androidプロジェクトのマニフェストを更新して、
res/xml/network_security_config.xml
などのネットワークセキュリティ構成ファイルを追加します。ただし、証明書に設定したファイル名を使用するようsrc属性を変更します。... <!-- デバッグ可能な場合にのみ以下のCAを信頼します --> <certificates src="@raw/my_ca"/> ...
暗号化トラフィックの検査
Charles CA証明書を信頼するようにデバイスを構成すると、デバイスでネットワークプロキシを有効にして、アプリの暗号化されたトラフィックを監視できます。次の手順を記載されている順序で実行する必要があります。
Charles Proxyを使用して暗号化トラフィックを検査するには、次の手順を実行します。
- Charles Proxyが実行中であることを確認します。
-
Charles ProxyアプリでSSL Proxyingを有効にします。メニューで [Proxy] > [SSL Proxy Settings...] の順に選択し、[Add] を選択して監視するホストを指定します。
www
などのサブドメインは別のものとみなされるため、個別に指定する必要があります。 -
デバイスで、ネットワークプロキシモードを [手動] に設定し、Charles Proxyが実行されているホスト名(またはIPアドレス)とポート番号を指定します。
- アプリを起動します。
これで、Charles ProxyでSSLプロキシを有効にした、アプリとサーバーエンドポイント間のセキュアなネットワークトラフィックを表示できるようになりました。データはCharles Proxyによって暗号化されていない状態で表示され、最終的な送信先に配信するために再暗号化されます。各リクエストとレスポンスのクリアテキストのヘッダーと本文を表示できます。
Charles Proxyを使用してアプリのネットワークトラフィックを検査する方法の詳細については、こちらのドキュメント(英語のみ)を参照してください。
関連リソース
詳細については、以下を参照してください。