iOS 14 端末での mitmproxy 設定方法


# はじめに

以下の記事を見ながら、手持ちの iPhone SE（第二世代）iOS 14.0.1 のデバイスで、mitmproxy 経由による通信内容の確認をしてみたときの備忘録になります。

【参考】
モバイルアプリ開発者のための mitmproxy 入門
https://qiita.com/hkurokawa/items/9034274cc1b9e1405c68

mitmproxy そもそもの使い方については触れていません。

# 動作環境

## Mac

```shell
$ mitmproxy --version
Mitmproxy: 5.2
Python:    3.8.2
OpenSSL:   OpenSSL 1.1.1g  21 Apr 2020
Platform:  macOS-10.15.7-x86_64-i386-64bit
```

## iPhone

- デバイス：iPhone SE（第二世代）
- iOS：14.0.1

# 設定手順

## 1. Mac が接続している Wi-Fi の IP アドレスの確認

- ステータスバーのネットワークアイコン > "ネットワーク"環境設定を開く
- Mac が接続している IP アドレスの確認

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/7df1e6c2-b8dc-377d-eda9-254920177564.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/c93290aa-3bc0-6d7b-1693-1992688a05e6.png width=40%>

## 2. iPhone のプロキシ設定

- 設定アプリ > Wi-Fi > Mac が接続している Wi-Fi と同じネットワークのi アイコン > プロキシ構成 > 手動
- 以下の内容で設定・保存
  - サーバ：先ほど確認した IP アドレス
  - ポート：8080（8080 は mitmproxy のデフォルトのポート番号のため任意の値にすることも可能）
  - 認証：オフ

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/fc401728-c9e7-4a28-afe6-b2e647faa6bb.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/bd5c5554-8f37-f4e7-971d-189b51e970bb.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/19113384-e9ad-2adf-2b37-a26d123d3fd8.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/3386870d-2205-54c2-de78-38bbe0e89318.png width=40%>


## 3. mitmproxy の立ち上げ

以下のコマンドを実行する。

```shell
$ mitmproxy
```

以下のようなコンソールが現れる。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/1f15e3a9-b3c3-5dbe-39a0-be1fc51e333c.png width=40%>


ここで iPhone で適当なサイトにアクセスすると証明書がなく通信が失敗するので、以下の手順を行う。

## 4. 構成ファイルを iPhone にダウンロードする

- `http://mitm.it` に Safari からアクセスする（ ※ Safari でなく Chrome などの別のブラウザで行うとうまくいきませんでした）
- Apple リンゴをタップ
- あとはガイド通りに構成プロファイルをダウンロードする

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/ed1fef25-264c-1d51-67ec-a9f8118aef51.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/a1c8907d-19e4-c110-4091-8fd85ccebd5b.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/98958f87-38e8-2520-e196-94a6d7b25ee4.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/ccdea8fe-cac1-c211-d395-d2e214ed9c26.png width=40%>


【参考】
iOSでもよく見る「プロファイル」って何に使うもの？ - マイナビBOOKS
https://book.mynavi.jp/macfan/detail_summary/id=65642

## 5. 構成ファイルを iPhone にインストールする

- 設定アプリ > プロファイルがダウンロード済み > インストール
- あとはガイド通りに構成プロファイルをインストールする
（※ 設定アプリ > 一般 > プロファイルとデバイス管理 > mitmproxy でも同じ場所にいけます）

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/d3b8f0e2-3312-fd6c-5baa-ec10d69991cb.png width=40%>

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/43a9ff6e-6b0f-cc75-a6f0-391ba1ca1a7a.png width=40%>

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/f8742161-f90b-9cf9-d277-270cb03d467d.png width=40%>

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/a228f8e2-c514-42ed-7f6f-b0bb04dd67c3.png width=40%>

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/436a36c2-6211-c7d7-6241-92f2be38cc66.png width=40%>





## 6. 証明書信頼設定で mitmproxy を有効にする

- 設定アプリ > 一般 > 情報 > 証明書信頼設定 > mitmproxy をオンにする

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/747eb3fc-38a9-40d5-c42a-2557b87c84a9.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/a9935c02-94c0-53f1-f7bd-7de4ab99c4f7.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/5e9e1034-bb1b-7698-952d-fa47f0909a08.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/05202e55-6656-35ea-3e35-e45ca5079024.png width=40%>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/4e568e98-24cc-1aea-2995-77bd9188e0a2.png width=40%>

以上の設定が完了して、ブラウザで適当なサイトにアクセスすると mitmproxy のコンソールに以下のように通信内容を確認することができる。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/6255672a-5d62-08e5-109a-ecb0b34c588a.png width=40%>


また、一度設定した端末では iPhone のプロキシ設定をして、mitmproxy を立ち上げるだけで通信内容を確認できる。

# 終了の仕方

## mitmproxy
- Control + c

## iPhone
- 設定アプリ > Wi-Fi > Mac が接続している Wi-Fi と同じネットワークのi アイコン > プロキシ構成 > オフ にする

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/84599fab-f801-583f-f1ed-f33e8d1d5bea.png width=40%>