システムルート証明書のインストール

このインターフェースは、Androidシステムにシステムレベルのルート証明書をインストールするために使用され、すべてのAndroidバージョンとの互換性があります。 ここで言うルート証明書とFIRERPAのサービス証明書がそれぞれ何であるか、混乱するかもしれません。FIRERPAサービス証明書はFIRERPAとユーザー間の通信トラフィックを暗号化するために使用されます。一方、ここで指すルート証明書はAndroidシステムに組み込まれたルート証明書であり、この証明書はシステム内のHTTPSなどの関連トラフィックの暗号化・復号化に使用されます。パケットキャプチャについてご存知であれば、ここでのルート証明書はパケットキャプチャ用の証明書を指します。本章のインターフェースとプロキシ設定インターフェースを組み合わせることで、中間者攻撃(MITM)によるパケットキャプチャを実現できます。もちろん、私たちがラップした startmitm.py を使用することもできます。ここでは、この基本的な機能の実装を紹介するだけです。

準備

fiddlerやmitmproxyが提供する証明書を準備してください。mitmproxyの場合、使用する証明書は mitmproxy-ca-cert.pem です。fiddlerの場合は、crt形式である可能性があります。fiddlerからこのファイルをエクスポートできるはずです。ファイルパスを直接パラメータとして渡すだけで、ファイル名の変換問題を気にする必要はありません。不必要な時間を浪費しないために、ここでは mitmproxy の使用を推奨します。Charles などを使用している場合、これらのアプリケーションは設定項目が複雑で、HTTPS中間者攻撃を正しく設定するためには様々なプロキシタイプを理解する必要があるため、一度で設定を完了できる保証はありません。どうしても使用したい場合は、CharlesのSOCKS5をプロキシプロトコルとして使用することをお勧めします。

ルート証明書のインストール

準備した証明書ファイルのパスがあれば、以下のインターフェースを直接記述してmitmproxyのルート証明書をインストールできます。一度インストールすれば永続的に存在し、再度インストールする必要はありません。

d.install_ca_certificate(cert_path)

ルート証明書のアンインストール

以下のコードを呼び出すことで、デバイスにインストールされたカスタムルート証明書を削除できます。頻繁なインストールとアンインストールは推奨しません。必要がない場合は、このインターフェースを呼び出す必要はありません。

d.uninstall_ca_certificate(cert_path)

完全なコードは以下の通りです(d デバイスインスタンスのインスタンス化は省略します)。

import os

# mitmproxy-ca-cert.pem ファイルのパスを結合
HOME = os.path.expanduser("~")
cert_path = os.path.join(HOME, ".mitmproxy", "mitmproxy-ca-cert.pem")
# mitmproxy を例に、以下のコードで中間者証明書をインストールします
d.install_ca_certificate(cert_path)

# 以下のコードで証明書をアンインストールします
d.uninstall_ca_certificate(cert_path)

この証明書のインストール・アンインストールインターフェースは汎用的です。これを使用して、任意のアプリケーションが要求する証明書をインストールできます。同様に、Fiddler/Charlesが要求する証明書もインストールでき、ファイルパスを提供するだけで済みます。パケットキャプチャを行いたい場合は、その後 プロキシの設定 の章を参照し、プロキシを中間者アプリケーションがリッスンしているアドレスに設定してください。