-
Notifications
You must be signed in to change notification settings - Fork 24
Мониторинг https трафика через Charles Fiddler proxy для Android и iOS
Charles (платный $57) и Fiddler(бесплатный) - это инструменты для анализа трафика, работают как прокси сервера. Умеют пропускать через себя https трафик, очень удобно при отладке и анализе приложений. Я использую Charles потому, что по моему мнению, он более удобный и есть под Linux. Fiddler написан на .NET и под Linux его можно запустить только через mono.
О том, что может Charles статься на хабре
По умолчанию 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
Proxy -> Proxy Settings
: Включаем HTTP и Socks Proxy
Proxy -> SSL Proxying Settings
: Enable SSL Proxying и Добавляем одно правило c пустыми параметрами (значит смотреть всё)
Help -> Local IP Address
: посмотреть IP на котором будет висеть прокси в локальной сети
Help -> SSL Proxying
: тут смотрим подсказки как установить сертификат на разные клиенту
Я настраивал на 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 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-трафик