Skip to content

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

Roman edited this page May 7, 2018 · 9 revisions

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

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

Задача

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

Настройка

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

Общий принцип - чтобы 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/networkSecurityConfig.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