Skip to content

Мониторинг https трафика через Charles Fiddler proxy для Android и iOS

Roman edited this page Aug 31, 2021 · 9 revisions

Charles (платный $57) и Fiddler(бесплатный) - это инструменты для анализа трафика, работают как прокси сервера. Умеют пропускать через себя https трафик, очень удобно при отладке и анализе приложений. Я использую Charles потому, что по моему мнению, он более удобный и есть под Linux. Fiddler написан на .NET и под Linux его можно запустить только через mono.

О том, что может Charles статься на хабре

Особенности под Linux c монитором HiDPI

По умолчанию charles запускается в LowDPI и всё очень мелко. Нужно выставить правильный sclae factor для java

/usr/bin/gsettings set org.gnome.desktop.interface scaling-factor 2

либо руками в /usr/bin/charles выставить

# HiDPI
GDK_SCALE=2

Задача

Хочу смотреть http/https трафик c мобильных приложений установленных на своём телефона

Настройка

Настройка не сложная но есть нюансы.

ВНИМАНИЕ!

При использовании Charles на Windows 10, после установки программы, Брандмауэр запросит разрешение на использование в приватных и публичных сетях. Здесь есть нюанс. Необходимо проверить подключение к сети на ПК - если там указано подключение как к приватной сети - дать разрешение брандмауэру на подключение к приватной сети, если к публичной - соответственно дать разрешение для подключения к публичной сети. Об этом никто не упомянул, но данный нюанс искался 2 часа Карл.

Общий принцип - чтобы Charles/Fiddler смог смотреть https трафик, он его дешефрует у себя, затем опять шифрует и отдаёт клиенту, подменяя сертификат. Чтобы клиент принял этот сетрификат требуется на устройство добавить корневой сертификат Charles. Не все приложения позволят такое провернуть, в некоторых, особенно в тех которые связаны c деньгами, есть защита от этого, называется ssl-pining

Настройка Charles

Proxy -> Proxy Settings : Включаем HTTP и Socks Proxy

Proxy -> SSL Proxying Settings : Enable SSL Proxying и Добавляем одно правило c пустыми параметрами (значит смотреть всё)

Help -> Local IP Address : посмотреть IP на котором будет висеть прокси в локальной сети

Help -> SSL Proxying : тут смотрим подсказки как установить сертификат на разные клиенту

iOS

Я настраивал на iOS 10.3 Заходим в настройки WiFi, для нужной сети жмём i -> внизу ищем HTTP Прокси

Вручную: задаём IP нашей машины в сети, порт 8888

Авто: https://chls.pro/<IP>.8888.pac и https://chls.pro/<IP>.8889.socks.pac для http и socks прокси соответственно

Проверяем что всё работает, а Charles должен быть виден трафик но пока без расшифровки.

В браузере заходим на http://chls.pro/ssl скачиваем сертификат и устанавливаем. Должен появится профиль в настройках Основные -> Профили

Важно чтобы сертификат стал доверенным надо зайти в Настройки -> Об этом устройстве -> Доверие сертификатов и там включить нужный сертификат. Без этого работать не будет.

Профит! Тепеьр можно смотреть https трафик

Android

Я настраивал на Android 7.0 Тут сложнее. Идём в WiFi сети, долго жмём по нужной сети, выбираем пункт меню Изменить сеть. Аналогично iOS настраиваем прокси. Далее также идём в браузере по адресу http://chls.pro/ssl, скачиваем и устанавливаем сертификат. При установке появится диалог "Укажите имя сертификата", туда можно вписать что угодно. Там есть поле Использовать регистр. Данных: VPN и приложения и WiFi - выбираем первое (VPN и приложения).

Сертификаты можно посмотреть и удалить в Настройик -> Безопастность -> Управление сертификатами

После этого https-трафик из браузера должен быть виден, но из приложений не всегда.

Важно Начиная c Android 7 (API 24) приложение должно явно сообщить системе, что хочет доверять пользовательским корневым сертификатам. Иначе приложения будут отвергать сертификат Charles. Поэтому на Android > 7 мы не сможем просмотреть трафик всех приложений просто так. Далее ограничимся только своими приложениями:

Статья где написано как сконфигурировать ваше приложение чтобы оно доверяло пользовательским корневым сертификатам Enable Android Nougat ‘Charles’ing SSL network

И ещё почитать в официальной доке https://developer.android.com/training/articles/security-config

В манифест добавляем

<application android:name="AppName"
 android:icon="@mipmap/ic_launcher" 
 android:label="@string/app_name"
 android:networkSecurityConfig="@xml/network_security_config">

В res/xml/network_security_config.xml добавляем

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
   <debug-overrides>
      <trust-anchors>
         <certificates src="system" />
         <certificates src="user" />
      </trust-anchors>
   </debug-overrides>
</network-security-config>

Профит! Теперь ваше приложение позволит смотреть https-трафик

Clone this wiki locally