Skip to content

Дешифровка HTTPS с помощью MITMPROXY

В заметке будет описано как установить mitmproxy на Linux чтобы дешифровать HTTPS трафик. Это может понадобиться для отладки веб приложений, которые зашифровывают свой трафик с помощью сертификатов.

mitmproxy уже рассматривался ранее в статье про TLS 1.3.

Мы будем дешифровать приложение, запущенное на Linux.

Последовательность действий:

  • Установка mitmproxy
  • Добавление mitmproxy сертификата в доверенные
  • Запуск mitmproxy
  • Просмотр расшифрованного трафика

Установка mitmproxy

Можно установить mitmproxy как Python модуль

pip3 install mitmproxy

Добавление mitmproxy сертификата в доверенные

mitmproxy использует самоподписанный сертификат. Поэтому приложение не сможет создать подключение из-за ошибки проверки сертификата.

Для того чтобы приложение запустилось нужно добавить mitmproxy сертификат в доверенные на стороне приложения.

Для этого следует сначала запустить mitmproxy первый раз и выйти.

mitmproxy

Это создаст сертификаты в домашнем каталоге пользователя.

  • Скопировать ~/.mitmproxy/mitmproxy-ca-cert.pem сертификат файл:

    • На CentOS:

      • в /etc/pki/ca-trust/source/anchors/
    • На Debian и Ubuntu:

      • в /usr/local/share/ca-certificates/
  • Запустить команду:

    • На CentOS:

      • update-ca-trust extract
    • На Debian и Ubuntu:

      • update-ca-certificates

Заметка: CA файл должен быть PEM формата и иметь CRT расширение (mycert.pem - не пойдёт, mycert.pem.crt - не пойдёт, mycert.crt - заработает).

Запуск mitmproxy

Прокси для приложения на той же машине

Чтобы пропустить соединение приложения через mitmproxy можно использовать переменную окружения. Допустим, что приложение и mitmproxy запускаются оба на одной машине, тогда можно задать прокси сервер в текущей сессии.

export HTTPS_PROXY="http://127.0.0.1:8080"

Дальше можно запустить mitmproxy в режиме веб сервера в фоновом режиме:

mitmweb &

Прокси для приложения на другой машине в сети

Запустим mitmproxy на другом порту и привяжем ко всем интерфейсам:

mitmweb --server --listen-host 0.0.0.0 --listen-port 8123 --web-host 0.0.0.0 --web-port 8456 --ssl-insecure

После этого в настройках браузера укажем IP адрес машины с mitmproxy и порт 8123.

Например, если для прокси подключения к 172.30.90.122 по порту 8123 в Firefox настройки могут выгладить так:

А для открытия веб консоли mitmproxy запустим другой браузер и подключимся к адресу mitmproxy сервера и порту 8456.

Просмотр расшифрованного трафика

Запустить приложение в той же сессии:

curl https://2ip.ru

Узать curl адрес прокси сервера:

curl  --proxy https://127.0.0.1:8000  https://ifconfig.me

Открыть веб браузер mitmproxy:

http://127.0.0.1:8081/

Закрыть mitmweb:

killall mitmweb

Источник 1