Skip to content

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

Roman edited this page Dec 27, 2021 · 9 revisions

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

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

Установка и особенности под Linux c монитором HiDPI

wget -q -O - https://www.charlesproxy.com/packages/apt/PublicKey | sudo apt-key add -
sudo sh -c 'echo deb https://www.charlesproxy.com/packages/apt/ charles-proxy main > /etc/apt/sources.list.d/charles.list'
sudo apt-get update
sudo apt-get install charles-proxy

Установка на оффициальном сайте

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

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

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

# HiDPI
GDK_SCALE=2

Решение с форума www.linux.org.ru

Задача

Хочу смотреть 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 11

Идём в WiFi сети, долго жмём по нужной сети, выбираем пункт меню Изменить сеть. Аналогично iOS настраиваем прокси.

Тут сертификат нужно устанавливать в ручную серез настройки.

В браузере заходим на http://chls.pro/ssl, сертификат скачивается в папку Downloads. Открыть, то напишет что чтото типа "Can't install CA certificates". Его нужно установить вручную из настроек.

Open Device settings

Go to 'Security'

Go to 'Encryption & Credentials'

Go to 'Install from storage' or 'Install a certificate' (depend on devices)

Select 'CA Certificate' from the list of types available

Accept a warning alert.

Browse to the certificate file on the device and open it

Confirm the certificate install

Подробнее: https://stackoverflow.com/questions/61386312/cant-install-ca-certificate-on-android-11

На 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