mitmproxy

ブラウザやアプリと Web サーバーの間に入り、HTTPS も含めた HTTP の通信を記録・確認・書き換えできるプロキシ。

cat mitmproxy/meta.yml確認日 2026-10-27

安全性

影響範囲 外に届く他人の通信を見る、または他人の機器へ通信を送る
管理者権限
不要
検証環境
不要

使い方

用途
診断・監査
難易度
中級
形態
コマンドライン
対応環境
Windows / macOS / Linux / Docker

信頼性

リポジトリ
mitmproxy/mitmproxy
ライセンス
自由に使えるMIT
GitHub
スター46,7852026-11-10 時点
メンテ状況
更新が続いている最終更新 2026-11-09
目次
  1. はじめに
  2. mitmproxy でできること
  3. 外と行う通信
  4. 安全な試し方:curl の 1 回だけを通す
  5. 主な使い方
  6. ZAP・Wireshark との違い
  7. 注意点
  8. 次に読む
  9. 出典

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 には、脆弱性を自動で探すスキャナーが入っていません。診断の自動化が必要なら ZAP を使います。

外と行う通信

  • 公式のインストールガイドによると、mitmproxy は自分から開発元へ連絡せず、更新の確認もしません。
  • 通したリクエストは、そのまま本来の宛先のサーバーに届きます。書き換えたリクエストや再送したリクエストも、相手のサーバーに実際に届きます。この記事で影響範囲を「中」としているのは、このためです。
  • 待ち受けるアドレスの既定値は空欄で、パソコンのすべてのネットワークに向けて開きます。インターネット側のアドレスからの接続は既定で拒否しますが(block_global)、同じ LAN の機器からはつながります。
  • Web 画面(mitmweb)は既定で 127.0.0.1:8081 に開き、起動のたびにランダムなトークンで守られます。

安全な試し方:curl の 1 回だけを通す

証明書を OS やブラウザに入れると、そのパソコンのすべての HTTPS 通信を mitmproxy が読める状態になります。最初はこれをせず、curl に証明書を直接渡して試します。手順 4 は、macOS か Linux の端末を想定しています。

  1. 公式サイトから、使っている OS 用のインストーラーかバイナリを入手します。macOS は Homebrew の brew install --cask mitmproxy でも入ります。

  2. 端末で次のように起動します。待ち受けを自分のパソコンの中だけに限り、同じ LAN の機器からはつながらないようにします。

    mitmweb --set listen_host=127.0.0.1

    ブラウザが開き、mitmweb の画面が出ます。初回の起動で、ホームの .mitmproxy フォルダーに証明書と鍵が作られます。

  3. 別の端末で、暗号化しない HTTP のリクエストを 1 件だけ mitmproxy に通します。

    curl --proxy 127.0.0.1:8080 http://example.com/

    mitmweb の一覧に 1 行増えます。行を選ぶと、リクエストとレスポンスの中身が読めます。

  4. 次に HTTPS を試します。mitmproxy の証明書を、この 1 回の curl にだけ渡します。

    curl --proxy 127.0.0.1:8080 --cacert ~/.mitmproxy/mitmproxy-ca-cert.pem https://example.com/

    HTTPS のリクエストも、暗号化を外した状態で一覧に出ます。OS の証明書ストアは変わっていません。

  5. 終わったら、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 がリリース時点のまま固定されています。公式は、こまめに新しい版へ更新するよう勧めています。

次に読む

出典

  1. 公式リポジトリ(mitmproxy/mitmproxy)github.com/mitmproxy/mitmproxy
  2. ライセンス(MIT)github.com/mitmproxy/mitmproxy/blob/main/LICENSE
  3. インストールdocs.mitmproxy.org/stable/overview/installation/
  4. Getting Started(入門)docs.mitmproxy.org/stable/overview/getting-started/
  5. 証明書についてdocs.mitmproxy.org/stable/concepts/certificates/
  6. プロキシのモードdocs.mitmproxy.org/stable/concepts/modes/
  7. オプション一覧docs.mitmproxy.org/stable/concepts/options/
  8. 機能一覧docs.mitmproxy.org/stable/overview/features/
  9. アドオンの概要docs.mitmproxy.org/stable/addons/overview/
  10. ZAP:サーバー証明書の設定www.zaproxy.org/docs/desktop/addons/network/options/servercertificates/
  11. Wireshark Wiki:TLSwiki.wireshark.org/TLS
  12. Wireshark ユーザーガイド:TSharkwww.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html

確認日 2026-10-27

似たツール

MobSF

影響範囲 手元だけ
MobSF/Mobile-Security-Framework-MobSF

Android や iOS のアプリを読み込んで、危ない設定や権限、コードの問題を一覧にするモバイルアプリ診断ツール。ブラウザから操作します。

用途
診断・監査
形式
Web サービス
難易度
中級
ライセンス
条件つきGPL-3.0
分類
リバースエンジニアリング/脆弱性スキャン
更新が続いているスター22,187最終更新 2026-11-10
MobSFの解説を読む

Wireshark

影響範囲 外に届く
wireshark/wireshark

ネットワークを流れるパケットを記録し、中身をプロトコルごとに分解して見せるパケットアナライザー。

用途
学習
形式
デスクトップアプリ
難易度
初級
ライセンス
条件つきGPL-2.0
分類
ネットワーク/フォレンジック
更新が続いているスター10,192最終更新 2026-11-10
Wiresharkの解説を読む

ZAP

影響範囲 相手に実害
zaproxy/zaproxy

ブラウザと Web アプリの間に入って通信を記録し、脆弱性を探す無料の Web アプリ診断ツール。旧称 OWASP ZAP、現在は ZAP by Checkmarx。

用途
診断・監査
形式
デスクトップアプリ
難易度
中級
ライセンス
自由に使えるApache-2.0
分類
Web セキュリティ/脆弱性スキャン
更新が続いているスター16,154最終更新 2026-11-06
ZAPの解説を読む