Skip to content

PacketProxyのCA証明書の各OSへのインストール方法

funa-tk edited this page Sep 13, 2022 · 1 revision

概要

PacketProxyを利用してTLS通信をMITMするには、各OSのトラストストアへPacketProxyのCA証明書をインストールすることが必要になります。

手順の流れは、PacketProxyのCA証明書をエクスポート後、それを各OSのトラストストアにインストールするという流れになります。

1. PacketProxyのCA証明書のエクスポート

  • PacketProxyのOptionsタブの下図に示すボタンからエクスポートできます。
    • 出力ファイル名は、packetproxy-ca.crtとします。
    • 出力フォーマットは、自動的にDER(バイナリ形式)になります。

2. 各OSのトラストストアへのインストール方法

Androidへのインストール方法

システムのトラストストアにインストールする方法 (Root化端末が必要)

下記の手順で、システムのトラストストアにCA証明書をインストールできます。

$ openssl x509 -inform der -in packetproxy-ca.pem -out packetproxy-ca.pem
$ openssl x509 -noout -subject_hash_old -in packetproxy-ca.pem
16b7b0ea
$ mv packetproxy-ca.pem 16b7b0ea.0
$ adb push 16b7b0ea.0 /sdcard/
$ adb shell
android> su
android# mount -o rw,remount /system
android# cp /sdcard/16b7b0ea.0 /system/etc/security/cacerts/
android# chmod 644 /system/etc/security/cacerts/16b7b0ea.0
android# mount -o ro,remount /system

また、もしMagiskを利用しているのであれば、CA証明書をMagiskモジュールにしておき、それをMagiskからインストールすることでCA証明書をデプロイすることもできます。

ユーザ定義のトラストストアにインストール (Root化端末必要なし)

Root化端末を持っていない場合は、下記の方法で、CA証明書をユーザ定義のトラストストアにインストールすることができます。

  1. PacketProxyのCA証明書をAndroid端末にコピーします。

    $ adb push packetproxy-ca.crt /sdcard/Download/
  2. Androidのシステム設定画面からCA証明書をインポートします。

さらに、下記の手順で、アプリ毎にユーザ定義のトラストストアの利用許可設定をしておく必要があります。

  1. APKを展開します。

    • Apktool等のツールを使ってAPKを展開します。
  2. 展開したAPKのAndroidManifest.xmlを修正します。

    • 下記のようにAndroidManifest.xmlnetworkSecurityConfigを追加します。
      <application android:networkSecurityConfig="@xml/network_security_config" ...>
      
  3. 展開したAPKにネットワークセキュリティ設定を追加します。

    • 下記内容のxmlファイルをres/xml/network_security_config.xmlに追加します。
      <?xml version="1.0" encoding="utf-8"?>
      <network-security-config>
          <base-config cleartextTrafficPermitted="true">
              <trust-anchors>
                  <certificates src="system"/>
                  <certificates src="user"/>
              </trust-anchors>
          </base-config>
      </network-security-config>
      
  4. APKをリパッケージ・署名し、Androidにインストールします。

    • Apktool等を使ってAPKをリパッケージし、apksignerで署名した上で、Androidにインストールします。

注意点として、アプリによってはユーザ定義のトラストストアを利用せず常にシステムのトラストストアのみ利用するケースや、独自のトラストストアを使うケースもあります。そのような場合には、別の方法(例えばコード改ざんをしてTLSライブラリ中のサーバ証明書のチェック関数(verify関数)を無効にする等)が必要になります。

iOSへのインストール

iOSのシステムのトラストストアへCA証明書をインストールするには、Apple Configuratorを使います。Jailbreak端末は必要ありません。

  1. MacでApple Configuratorを起動します。
  2. ファイルメニューから新規プロファイルを選択します。
  3. 新規プロファイル設定画面の左ペインから証明書機能を選択し、右ペインの構成ボタンからpacketproxy-ca.crtを下記のように読み込ませます。
  1. packetproxy-ca.mobileconfigとして、任意のディレクトリにプロファイルを保存します。
  2. ライトニングケーブルでiPhoneをMacに接続します。
  3. AppleConfigurator上でiPhoneが検出されるので、検出したiPhoneを選択後Action追加プロファイルから、先ほど作成したプロファイルをiPhoneにインストールしてください。
  4. プロファイルをiPhoneにインストールできたら、iPhoneの設定一般情報証明書信頼設定から下記のようにCA証明書を有効化すれば完了です。

もしJailbreak端末を利用しているのであれば、SSL Kill Switch 2等のツールを使うことで、サーバ証明書のverify処理自体を無効化するという荒技を使うこともできます。

MacOSへのインストール

  1. Finderでpacketproxy-ca.crtをダブルクリックすることで、キーチェーンアクセスアプリにCA証明書をロードします。
  1. ロードしたCA証明書に対して右クリック情報を見るを選択し、プロパティを表示します。
  2. プロパティのドップダウンリストで常に信頼を選択し保存します。

Windowsへのインストール

  • DigiCertのWebページを参考にしてインストールできます。