開発者コンソール

ネットワークプロキシ

ネットワークプロキシ

開発者ツールメニューには、[ネットワークプロキシ] オプションがあり、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で信頼する方法

  1. Charles Proxyアプリ内からPEM形式の証明書ファイルを取得します。メニューで [Help] > [SSL Proxying] > [Save Charles Root Certificate…] の順に選択します。
  2. 証明書ファイルをFire TVデバイスにアップロードします。
     adb push charles-ssl-proxying-certificate.pem /storage/emulated/0/Download
    
  3. アップロードしたファイルの [証明書インストーラー] ダイアログを開きます。
     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"
    
  4. わかりやすい名前を指定し、[認証情報の使用][VPNとアプリ] が選択されていることを確認します。

  5. [OK] を選択して証明書をインストールします。Amazonの認証情報を使用して認証するよう求められます。成功すると、画面上に通知が表示されます。

Charles CAをFOS 6で信頼する方法

  1. 上記のFOS 5と同様に、証明書ファイルを取得してインストールします。
  2. AndroidプロジェクトのAndroidManifest.xmlを更新し、ネットワークセキュリティ構成ファイルを追加します。

     <?xml version="1.0" encoding="utf-8"?>
     <manifest ... >
         <application android:networkSecurityConfig="@xml/network_security_config"
                      ... >
            ...
         </application>
     </manifest>
    
  3. IDEやビルドツールでこのフラグが自動的に設定されない場合は、要素にandroid:debuggable="true"を追加します。構成方法の詳細については、デバッグ用のCAを構成するを参照してください。
  4. 次の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>
    

または

  1. 上記のFOS 5と同様に証明書ファイルを取得しますが、デバイスにはインストールしません。
  2. 代わりに、証明書ファイルをアプリに直接埋め込みます(Androidプロジェクトのres/rawサブディレクトリに証明書ファイルをコピーします)。必要に応じてファイル名を変更できます(res/raw/my_caなど)。
  3. 上記のように、Androidプロジェクトのマニフェストを更新して、res/xml/network_security_config.xmlなどのネットワークセキュリティ構成ファイルを追加します。ただし、証明書に設定したファイル名を使用するようsrc属性を変更します。

     ...
     <!-- デバッグ可能な場合にのみ以下のCAを信頼します -->
     <certificates src="@raw/my_ca"/>
     ...
    

暗号化トラフィックの検査

Charles CA証明書を信頼するようにデバイスを構成すると、デバイスでネットワークプロキシを有効にして、アプリの暗号化されたトラフィックを監視できます。次の手順を記載されている順序で実行する必要があります。

Charles Proxyを使用して暗号化トラフィックを検査するには、次の手順を実行します。

  1. Charles Proxyが実行中であることを確認します。
  2. Charles ProxyアプリでSSL Proxyingを有効にします。メニューで [Proxy] > [SSL Proxy Settings...] の順に選択し、[Add] を選択して監視するホストを指定します。wwwなどのサブドメインは別のものとみなされるため、個別に指定する必要があります。

  3. デバイスで、ネットワークプロキシモードを [手動] に設定し、Charles Proxyが実行されているホスト名(またはIPアドレス)とポート番号を指定します。

  4. アプリを起動します。

これで、Charles ProxyでSSLプロキシを有効にした、アプリとサーバーエンドポイント間のセキュアなネットワークトラフィックを表示できるようになりました。データはCharles Proxyによって暗号化されていない状態で表示され、最終的な送信先に配信するために再暗号化されます。各リクエストとレスポンスのクリアテキストのヘッダーと本文を表示できます。

Charles Proxyを使用してアプリのネットワークトラフィックを検査する方法の詳細については、こちらのドキュメント(英語のみ)を参照してください。

関連リソース

詳細については、以下を参照してください。