mitmproxy は、ブラウザやアプリと Web サーバーの間に入って、HTTP のやり取りを 1 件ずつ見せるプロキシです。HTTPS の通信も、mitmproxy の証明書を信頼させれば中身まで読めます。最初はシステムの設定を変えず、curl の 1 回のリクエストだけを mitmproxy に通して試すと安全です。
この記事は、自分の Web アプリやスマホアプリの通信を確かめたい開発者と、Web の仕組みを学び始めた人に向けています。読み終えると、次のことができるようになります。
- mitmproxy を自分のパソコンの中だけで待ち受けさせ、Web 画面で通信を見る
- OS やブラウザの証明書ストアに手を加えずに、HTTPS のリクエストを 1 件だけ読む
- 証明書の秘密鍵が漏れると何が起きるかを知り、使い終えた後の片付けをする
mitmproxy でできること
mitmproxy には画面の違う 3 つの道具が入っています。
| 道具 | 画面 |
|---|---|
mitmproxy |
端末の中で操作する画面 |
mitmweb |
ブラウザで開く画面 |
mitmdump |
操作画面なし。結果を端末に流す(公式の説明は「HTTP 版の tcpdump」) |
- 通信の記録と確認:リクエストとレスポンスのヘッダーと本文を、1 件ずつ開いて読めます。HTTP/1、HTTP/2、WebSocket に対応します。
- 書き換えと再送:記録したリクエストを書き換えて送り直せます。保存したやり取りをまとめて再送する機能もあります。
- 差し替えと遮断:特定の URL への応答を手元のファイルに差し替える
map_localや、特定のサイトへのリクエストを止めるblock_listがあります。 - Python での自動化:アドオンという Python のスクリプトを
-sで読み込むと、リクエストのたびに処理を走らせられます。 - 待ち受け方の切り替え:プロキシの設定を無視するアプリには、同じパソコンの通信を横取りする local モードや、スマホなど別の機器をつなぐ WireGuard モードを使います。
外と行う通信
- 公式のインストールガイドによると、mitmproxy は自分から開発元へ連絡せず、更新の確認もしません。
- 通したリクエストは、そのまま本来の宛先のサーバーに届きます。書き換えたリクエストや再送したリクエストも、相手のサーバーに実際に届きます。この記事で影響範囲を「中」としているのは、このためです。
- 待ち受けるアドレスの既定値は空欄で、パソコンのすべてのネットワークに向けて開きます。インターネット側のアドレスからの接続は既定で拒否しますが(
block_global)、同じ LAN の機器からはつながります。 - Web 画面(mitmweb)は既定で
127.0.0.1:8081に開き、起動のたびにランダムなトークンで守られます。
安全な試し方:curl の 1 回だけを通す
証明書を OS やブラウザに入れると、そのパソコンのすべての HTTPS 通信を mitmproxy が読める状態になります。最初はこれをせず、curl に証明書を直接渡して試します。手順 4 は、macOS か Linux の端末を想定しています。
-
公式サイトから、使っている OS 用のインストーラーかバイナリを入手します。macOS は Homebrew の
brew install --cask mitmproxyでも入ります。 -
端末で次のように起動します。待ち受けを自分のパソコンの中だけに限り、同じ LAN の機器からはつながらないようにします。
mitmweb --set listen_host=127.0.0.1ブラウザが開き、mitmweb の画面が出ます。初回の起動で、ホームの
.mitmproxyフォルダーに証明書と鍵が作られます。 -
別の端末で、暗号化しない HTTP のリクエストを 1 件だけ mitmproxy に通します。
curl --proxy 127.0.0.1:8080 http://example.com/mitmweb の一覧に 1 行増えます。行を選ぶと、リクエストとレスポンスの中身が読めます。
-
次に HTTPS を試します。mitmproxy の証明書を、この 1 回の
curlにだけ渡します。curl --proxy 127.0.0.1:8080 --cacert ~/.mitmproxy/mitmproxy-ca-cert.pem https://example.com/HTTPS のリクエストも、暗号化を外した状態で一覧に出ます。OS の証明書ストアは変わっていません。
-
終わったら、mitmweb を起動した端末で
Ctrl+Cを押して止めます。
ブラウザ全体の通信を見たいときは、プロキシを 127.0.0.1:8080 にしたブラウザで http://mitm.it を開きます。mitmproxy が返す案内ページから証明書を入れられます。普段使いとは別のブラウザやプロファイルを用意し、そちらにだけ入れると影響が小さく済みます。
主な使い方
| やりたいこと | 方法 |
|---|---|
| ブラウザの通信を画面で見る | mitmweb を起動し、ブラウザのプロキシを 127.0.0.1:8080 にする |
| 通信をファイルに残して後で読む | mitmdump --set save_stream_file=flows.mitm |
| プロキシ設定を無視するアプリを見る | mitmproxy --mode local:<プログラム名> |
| スマホのアプリを見る | WireGuard モードで、スマホを WireGuard でつなぐ |
| 応答を手元のファイルに差し替える | map_local オプション |
| 読み込みのたびに処理を走らせる | Python のアドオンを -s で読み込む |
local モードは Windows、macOS、Linux で使えます。公式の文書によると、Linux では sudo で権限のあるプロセスを起動し、Linux 6.8 以降を対象にしています。WSL では使えません。
アドオンは、関数を 1 つ書くだけでも動きます。公式の例は、すべてのリクエストにヘッダーを 1 つ足すスクリプトです。
def request(flow):
flow.request.headers["myheader"] = "value"
これを add_header.py として保存し、mitmdump -s add_header.py で読み込みます。
ZAP・Wireshark との違い
| mitmproxy | ZAP | Wireshark | |
|---|---|---|---|
| 見る単位 | HTTP のリクエストとレスポンス | HTTP のリクエストとレスポンス | ネットワークのパケット |
| HTTPS の中身 | 自分の証明書を信頼させて読む | 自分の証明書を信頼させて読む | 鍵のログなどがあれば読める |
| 脆弱性の自動スキャン | なし | あり | なし |
| 主な操作画面 | 端末と Web 画面 | デスクトップの画面 | デスクトップの画面 |
| 自動化 | Python のアドオン | Docker のスキャン用スクリプトなど | コマンド版(tshark) |
自分のアプリが何を送っているかを確かめるだけなら、mitmproxy が向いています。HTTP より下の層、たとえば DNS や TCP の動きを見たいときは Wireshark を使います。
注意点
- 自分の機器の通信だけに使ってください。他人の通信を、本人の同意なしに傍受しないでください。
.mitmproxyフォルダーのmitmproxy-ca.pemには、証明書と秘密鍵が入っています。この鍵を持つ人は、mitmproxy の証明書を信頼した機器の HTTPS 通信を読めます。人に渡さず、クラウドの同期フォルダーにも置かないでください。- 証明書を OS やブラウザに入れた場合は、使い終えたら外してください。入れたままにすると、鍵が漏れたときに通信を読まれるおそれが残ります。
- 待ち受けを
127.0.0.1に限らないと、同じ LAN の機器がこのプロキシを使えてしまいます。カフェなど共用の Wi-Fi では特に気をつけてください。 - 証明書を固定する(ピン留めする)アプリは、mitmproxy の証明書を受け付けず、通信が失敗します。公式は、中身が要らない宛先を
ignore_hostsで素通しにする方法を案内しています。 - 公式が配るバイナリは、同梱の Python や OpenSSL がリリース時点のまま固定されています。公式は、こまめに新しい版へ更新するよう勧めています。
次に読む
出典
- 公式リポジトリ(mitmproxy/mitmproxy)github.com/mitmproxy/mitmproxy
- ライセンス(MIT)github.com/mitmproxy/mitmproxy/blob/main/LICENSE
- インストールdocs.mitmproxy.org/stable/overview/installation/
- Getting Started(入門)docs.mitmproxy.org/stable/overview/getting-started/
- 証明書についてdocs.mitmproxy.org/stable/concepts/certificates/
- プロキシのモードdocs.mitmproxy.org/stable/concepts/modes/
- オプション一覧docs.mitmproxy.org/stable/concepts/options/
- 機能一覧docs.mitmproxy.org/stable/overview/features/
- アドオンの概要docs.mitmproxy.org/stable/addons/overview/
- ZAP:サーバー証明書の設定www.zaproxy.org/docs/desktop/addons/network/options/servercertificates/
- Wireshark Wiki:TLSwiki.wireshark.org/TLS
- Wireshark ユーザーガイド:TSharkwww.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html
確認日 2026-10-27
似たツール
MobSF
影響範囲 手元だけAndroid や iOS のアプリを読み込んで、危ない設定や権限、コードの問題を一覧にするモバイルアプリ診断ツール。ブラウザから操作します。
- 用途
- 診断・監査
- 形式
- Web サービス
- 難易度
- 中級
- ライセンス
- 条件つきGPL-3.0
- 分類
- リバースエンジニアリング/脆弱性スキャン
Wireshark
影響範囲 外に届くネットワークを流れるパケットを記録し、中身をプロトコルごとに分解して見せるパケットアナライザー。
- 用途
- 学習
- 形式
- デスクトップアプリ
- 難易度
- 初級
- ライセンス
- 条件つきGPL-2.0
- 分類
- ネットワーク/フォレンジック
ZAP
影響範囲 相手に実害ブラウザと Web アプリの間に入って通信を記録し、脆弱性を探す無料の Web アプリ診断ツール。旧称 OWASP ZAP、現在は ZAP by Checkmarx。
- 用途
- 診断・監査
- 形式
- デスクトップアプリ
- 難易度
- 中級
- ライセンス
- 自由に使えるApache-2.0
- 分類
- Web セキュリティ/脆弱性スキャン