Содержание
Как сниффить HTTPS-трафик iOS-устройства / Хабр
Привет, меня зовут Андрей Батутин, я Senior iOS Developer в DataArt, и сегодня мы будем сниффить HTTPS-трафик твоего «Айфона».
FoodSniffer и с чем его едят
Возьмем, к примеру, очень простое iOS-приложение FoodSniffer. Оно в зависимости от времени дня показывает пользователю, что можно есть.
Приложение получает от сервера JSON вида:
[ { "name" : "soup", "consumePeriod" : "morning" }, … ]
Сервером в данном случае выступает Dropbox, а JSON можно посмотреть здесь.
Проблема №1
Пришел баг, что вместо двух элементов в списке разрешенной утром еды приложение показывает только один.
Один из способов проверить, что пошло не так, — увидеть JSON, который вам возвращает сервер.
Как сниффить трафик?
Предположим, что ваши MacOS-компьютер и iOS-устройство находятся в одной локальной сети, которая выглядит примерно так:
Трафик идет от iOS-устройства через роутер к серверу независимо от трафика компьютера.
Чтобы читать трафик iOS-устройства, нам нужно сделать так, чтобы он шел через наш Мac. Примерно так:
Кроме того, нам понадобится HTTP/S-прокси-сервер, с помощью которого мы бы и смотрели/модифицировали проходящий трафик iOS-устройства.
Еще одна очень важная задача — иметь возможность сниффить HTTPS-трафик. Загвоздка в том, что HTTPS-протокол и создавался, чтобы, кроме клиента и сервера, никто не мог прочесть, что передается в HTTPS-запросах. Поэтому HTTPS-прокси должен поставлять с собой еще и SSL-сертификат, который нужен для работы с HTTPS-трафиком.
Иными словами, нам нужно реализовать Man-in-the-Middle-атаку на нашу собственную сеть.
Charles Web Debugging Proxy Application
Как видим, сниффить HTTPS-трафик — задача многоэтапная, поэтому чтобы максимально упростить себе жизнь, я использую Charles Proxy.
Начнем с минусов:
- Он платный, но единственное ограничение которое есть в пробной версии — Charles работает не дольше 30 минут, потом его надо перезапускать. Еще есть пятисекундные задержки при запуске. Это раздражает, но жить можно.
- Если вам нужен подлинный хакерский инструмент для работы на удаленном сервере 24/7, да еще с нормальным CLI, Charles не для вас.
- Если вы работаете на Windows, вам лучше взять Fiddler, он еще и бесплатный.
- Если вам нужен прокси-сервер для большого количества устройств (больше двух-трех), Charles не для вас.
- Если вам нужно работать с TCP/IP-пакетами в чистом виде, возьмите Wireshark.
Теперь плюсы:
- User-Friendly UI. Charles не требует никаких специальных знаний ни для установки, ни для настройки, ни для использования. Обычное MacOs оконное приложение.
- HTTPS for iOS — у Charles есть набор инструментов, которые делают HTTPS-сниффинг с вашего iOS-устройства максимально простым в настройке.
- Функционал — Charles может сниффить, модифицировать проходящий через него трафик, имитировать медленный интернет, собирать статистику, импорт/экспорт трафика в различных форматах.
- Доступен для Windows и Linux.
Для меня это оптимальное решение по соотношению функционала и простоты в использовании при работе с iOS-устройствами.
Настройка Charles и iOS-устройства
Далее будет описана процедура первоначальной настройки iOS-устройства для работы с Charles Proxy.
1. Запустить Charles на компьютере:
2. Установить Charles Root Certificate на iOS устройстве:
В меню выбираем Help -> SSL Proxing — > Install Charles Root Certificate on Mobile Device or Remote Browser.
Появится следующее окно:
3. В настройках сети iOS-устройства указываем IP и порт Charles Proxy:
В зависимости от архитектуры вашей сети IP-адрес, на котором работает Charles, может отличаться.
4. Открываем браузер на iOS-устройстве и переходим по ссылке — http://chls.pro/ssl.
5. Устанавливаем Charles SSL-сертификат на устройство:
6. Указываем в настройках устройства, что полностью доверяем данному сертификату:
Шестой этап нужен для устройств с iOS 10 и выше.
На 5–6-м этапах мы установили на устройство Charles SSL-сертификат и указали, что мы ему доверяем. Т. е. теперь весь HTTPS-трафик, подписанный этим сертификатом, не будет блокироваться ATS.
Как смотреть трафик iOS-устройства
Откройте приложение FoodSniffer. Если настройка прокси была сделана правильно, то вы должны увидеть такой экран:
В Charles Proxy откройте в меню Tools -> No Caching.
И полностью выключите кэширование на прокси-сервере.
В приложении реализован Pull-to-refresh, после обновления списка продуктов вы должны в Charles увидеть https://www.dropbox.com в списке с левой стороны. Нажмите правой кнопкой мыши на него и выберите Enable SSL Proxing.
После этого еще раз обновите список продуктов в приложении. Теперь вы должны увидеть примерно такую картину:
Теперь мы можем свободно читать HTTPS-трафик, который идет от приложения на Dropbox за нашим JSON.
Но это еще не все!
Dropbox не отдает JSON c хоста dropbox.com напрямую. Вместо этого он возвращает 302-респонс и редиректит еще на один хост, с которого и происходит загрузка данных.
Найти его можно, просмотрев Raw Response следующего запроса:
В данном случае это —
uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com.
У вас, скорее всего, будет немного другой хост.
Затем включаем для него SSL Proxing: Enabled.
Обновляем FoodSniffer еще раз.
И теперь мы наконец можем увидеть реальный JSON, который и показывает приложение!
Мы видим, что у нас есть всего один тип еды на вечернее время — виски, пишем об этом нашему тимлиду и идем пить кофе, проблема не на нашей стороне.
*В проекте применяется уже исправленный JSON, с двумя типами еды на вечер: пивом и виски.
*Если вы не видите хост http://uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com или похожий на него в списке в левой части окна, попробуйте обновить список продуктов в приложении несколько раз.
Проблема № 2, или Как изменять HTTPS-трафик iOS-устройства
Бэкенд-команда исправила меню на вечер, и теперь JSON формируется правильно. Но что делать, если сейчас утро, а ждать до вечера, чтобы проверить фикс, не хочется?
Один из вариантов — с помощью Charles изменять JSON, который вам приходит в ответ от Dropbox.
В данном случае нам нужно изменить consumePeriod с evening на morning.
Для этого в меню выбираем Tools -> Rewrite.
В появившемся окне Rewrite Settings добавляем новую категорию для перезаписи — dropbox.
Добавляем хост, указывая https-порт в Edit Location меню:
После этого добавляем правила перезаписи в Rewrite Rule меню следующим образом:
Т. е. теперь в каждом Body респонса от нашего сервера слово evening будет заменено на слово morning.
При необходимости мы можем менять любую часть HTTP-запроса/ответа, плюс использовать regex-выражение для замены текста.
Теперь, обновив список, мы должны увидеть четыре типа продуктов:
Вывод
Charles довольно простой, условно-бесплатный, обладает богатым функционалом HTTPS-прокси. С моей точки зрения, он лучше всего проявляет себя при работе с MacOS и iOS-устройствами.
Это далеко не единственный способ сниффить трафик. Для HTTP/S-трафика широко применяют и Fiddler. Если вам нужно уйти глубже в TCP/IP-стэк — есть Wireshark.
Кроме того, существует проблема certificate pinning. Если в вашем приложении он реализован, вам надо либо добавлять Charles SSL-сертификат в список разрешенных сертификатов, либо использовать такое средства, как Frida, чтобы отключить certificate pinning уже на уровне самого приложения. Об этом подробнее надеюсь рассказать в следующей статье.
Буду рад, если вы поделитесь вашим опытом в мониторинге трафика, в том числе HTTP/S, советам и лайфхаками.
Примечание. Используйте эту технику только для своих приложений, пожалуйста. Будьте белыми зайчиками хакерами!
Примечание 2. Недавно история об этом выходила на украинском, но по-русски я ее публикую впервые.
Как перехватить трафик c девайса iOS через Charles
1. Перейдите в настройки MacOS -> System Preferences -> Network -> Ваше сетевое подключение (в моем случае, Wi-Fi) -> Запомните полученный IP-адрес.
2. В этом же окне нажмите Advanced -> Proxies -> Установите галочку для Web Proxy (HTTP) -> Введите ваш IP-адрес в поле Web Proxy Server и порт 8888.
3. В этом же окне установите галочку «Secure Web Proxy (HTTPS)» -> Введите ваш IP-адрес и порт 8888.
4. Перейдите в Charles -> Proxy -> Access Control Setting -> Add -> Добавьте ваш IP-адрес.
5. Перейдите в Charles -> Proxy -> Proxy Setting -> Вкладка Proxies -> Значение порта должно быть 8888.
6. Теперь перейдем к настройке телефона. Убедитесь, что ваш компьютер и телефон подключены к одной и той же сети.
На рабочем столе телефона -> Настройки -> Wi-Fi -> -> Нажмите иконку (i) напротив имени вашей сети -> Внизу выбрать Настройки прокси -> Вручную -> В поле Сервер ввести тот адрес, который запомнили в пункте 1 и вводили его в пункте 2 и 3, а в поле Порт введите 8888. Вверху справа сохраняем.
7. Откройте Charles и нажмите запись трафика (Proxy -> Start Recording). Должно появиться окно на разрешение доступа Charles, в котором нажать Allow.
8. В телефоне в браузере Safari откройте ссылку http://www.charlesproxy.com/getssl и разрешите загрузку.
9. На рабочем столе телефона откройте Настройки –> Выберите «Профиль загружен»
10. Вверху справа нажмите Установить. Введите пароль от телефона.
11. На рабочем столе перейдите Настройки -> Основные -> Об этом устройстве -> Доверенные сертификаты -> Включите доверять сертификату.
12. Теперь все готово для перехвата. Проверим браузер. Введите в Safari ссылку apple.com. В Charles нажмите правой кнопкой на этот запрос в apple и выберите Enable SSL Proxying.
Откройте ссылку apple еще раз в браузере, чтобы в Charles появился новый запрос, но уже с расшифрованным трафиком.
13. Также стал доступен перехват и для мобильного приложения. Приведу пример на своем приложении погоды (https://github.com/yauheniprakapenka/Weather-my-4th-app). При вводе в строку поиска отправляется запрос на получение картинки и погоды. Например, введу Paris.
Нахожу этот запрос в Charles и активирую для него все тот же Enable SSL Proxying. Ответ расшифрован.
Важно! После завершения работы не забудьте отключить использование прокси, а именно отмените действия пунктов 2, 3 и 6. В противном случае, если вы выключите Charles или перейдете в другую сеть, получив новый IP, то ваш интернет работать уже не будет.
Тестирование мобильных приложений:
- Прерывания: https://bitly.su/edoJP
- Сеть: https://bitly.su/EkYLI
- Системные настройки: https://bitly.su/DTdp
Автоматизация iOS приложений:
- Запуск нескольких копий приложения: https://bitly. su/n0XOuEW8
Сниффинг:
- Перехватить трафик с девайса iOS для MacOS: https://bitly.su/KIZlIhb
- Перехватить трафик с девайса Android для MacOS: https://bitly.su/FZskJ
- Перехватить трафик с браузера в MacOS: https://bitly.su/CAgLilk
- Перехватить трафик с эмулятора Android из браузера: https://bitly.su/wGKBY9Et
- Перехватить трафик с симулятора iOS из браузера: https://bitly.su/h4cPv9yo
Гайдлайны:
- Требования к иконке для App Store и Google Play: https://bitly.su/qoEwY0
Я на Github:
- github.com/yauheniprakapenka
Charles Proxy в App Store
Описание
Charles Proxy для iOS позволяет захватывать и проверять сетевые запросы и ответы на вашем устройстве iOS. Вы можете просматривать метаданные, заголовки и тело в приложении, чтобы, наконец, отлаживать сетевые проблемы вашего приложения без компьютера.
Charles Proxy для iOS — новое приложение от создателей Charles Proxy для ПК.
КАК ЭТО РАБОТАЕТ
Включите Чарльза, когда хотите начать захват. Чарльз фиксирует ваши сетевые запросы и ответы в фоновом режиме, пока вы тестируете свое приложение или веб-сайт. Вернитесь к Чарльзу, чтобы проверить запросы и ответы.
Если у вас также есть Чарльз на рабочем столе, вы можете перенести записанные сеансы на свой рабочий стол, чтобы просмотреть их на большом экране.
Чарльз создает локальную сеть VPN на вашем устройстве. Весь ваш сетевой трафик проходит через Charles на вашем устройстве, а затем, как обычно, выходит в Интернет через Wi-Fi или мобильные/сотовые данные. Удаленный сервер не задействован, и ваши данные всегда остаются для вас конфиденциальными.
ВОЗМОЖНОСТИ
* SSL-прокси для просмотра SSL-запросов в виде обычного текста
* Просмотр и совместное использование тел запросов и ответов
* Подсветка синтаксиса для текстовых тел запросов и ответов
* Измерение производительности сети через Wi-Fi или мобильные / сотовые сети
* Блокировка запросов к назначенным хостам
* DNS-спуфинг
000Z» aria-label=»September 27, 2020″> 27 сентября 2020 г.
Версия 1.4
Улучшения для iOS 13 и 14 включают совместимость с новым сертификатом SSL CA. Обновление OpenSSL 1.1.1n.
Рейтинги и обзоры
158 оценок
Не хватает только одного
Было бы здорово, если бы вы добавили ту же функциональность «фокуса», что и настольное приложение, сделали его любимым или чем-то, что вы можете выбрать конечные точки, которые всегда отображаются вверху, чтобы ускорить отладку во время кодирования, это единственный чего не хватает, чтобы сделать его 5-звездочным обзором.
Спасибо.
Приятно видеть, куда приложения отправляют ваш веб-трафик
Я не программист и не веб-разработчик. Но меня очень интересует личная конфиденциальность и информация, которую мои установленные приложения отправляют третьим лицам. Это приложение позволяет мне прослушивать интернет-запросы и ответы, поступающие с и на мой iPhone и iPad через HTTP, HTTPS и сотовые сети. Используя доменные имена и IP-адреса сетевого трафика, вы можете увидеть, что подавляющее большинство популярных приложений отправляют данные об устройствах (имя, устройство, календарь, местоположение, историю поиска и т. д.) во многие сторонние рекламные трекеры. Если вы хотите узнать, какие установленные приложения являются основными источниками цифрового наблюдения и отслеживания личной информации на вашем устройстве, скачайте это приложение.
Установка приложения заняла около 10 минут. Инструкции по настройке ясны и понятны, но для правильной работы приложения их необходимо точно соблюдать.
Большое спасибо команде CharlesProxy за перенос этого приложения на iOS и за то, что им так легко пользоваться.
Так удобно!
iOS-версия Charles является идеальным дополнением к настольной версии: она включается и выключается без вмешательства в настройки Wi-Fi, может захватывать данные сотовой связи и работает, даже когда вы находитесь вдали от своего ноутбука. Было бы здорово, если бы вы могли включать/выключать или очищать сеанс без переключения приложений, например, через Центр управления или Центр уведомлений.
Используйте настольную версию для более удобного просмотра и поиска файлов захвата, а также расширенных функций, таких как Map Remote или повторяющиеся запросы. Если вы застряли, есть отличная информация на веб-сайте Чарльза. Удачного розыска!
Разработчик, XK72 Limited, не предоставил Apple подробностей о своей политике конфиденциальности и обработке данных. Для получения дополнительной информации см. политику конфиденциальности разработчика.
Сведения не предоставлены
Разработчик должен будет предоставить сведения о конфиденциальности при отправке следующего обновления приложения.
Информация
- Продавец
- XK72 Лимитед
- Размер 5 megabytes»> 20,5 МБ
- Категория
Утилиты
- Возрастной рейтинг
- 4+
- Авторское право
- © 2019XK72 ООО
- Цена
- 8,99 $
Сайт разработчика
Тех. поддержка
Политика конфиденциальности
Опоры
Вам также может понравиться
Учебное пособие по прокси-серверу
Charles для iOS
Узнайте, как использовать Charles для iOS и macOS для проверки зашифрованного и незашифрованного сетевого трафика как ваших собственных, так и сторонних приложений.
Примечание об обновлении : Ирина Галата обновила это руководство для Xcode 12, Swift 5 и iOS 14. Оригинал написал Аарон Дуглас.
Посмотрим правде в глаза — мы все написали код, который работает неправильно, и отладка может быть сложной. Еще сложнее, когда вы общаетесь с другими системами по сети.
К счастью, Charles Proxy значительно упрощает отладку сети.
Чарльз Прокси находится между вашим приложением и Интернетом. Вы настраиваете свой симулятор или устройство iOS для передачи всех сетевых запросов и ответов через Charles Proxy, поэтому вы сможете проверять и даже изменять данные в середине потока, чтобы проверить, как реагирует ваше приложение.
В этом уроке вы получите практический опыт. В процессе вы узнаете все о:
- Прокси и о том, как они работают на macOS и iOS.
- Подготовка системы к использованию Charles.
- Отслеживание приложений.
- Моделирование и устранение неполадок медленных сетей.
- Устранение неполадок в собственных приложениях.
Готовы погрузиться?
Начало работы
Загрузите начальный проект, нажав кнопку Загрузить материалы вверху или внизу руководства.
Затем загрузите последнюю версию Charles Proxy для Mac (v4.6.1 на момент написания). Дважды щелкните файл DMG и перетащите значок Charles в папку «Приложения», чтобы установить его.
Charles Proxy не бесплатен, но есть бесплатная 30-дневная пробная версия. Charles будет работать только в течение 30 минут в пробном режиме, поэтому вам может потребоваться перезапустить его на протяжении всего этого руководства.
Примечание : Charles — это приложение на основе Java, которое поддерживает macOS, Windows и Linux. Это руководство по Charles Proxy предназначено для macOS, и некоторые вещи могут отличаться на других платформах.
Запуск Чарльз . Он должен запросить разрешение на автоматическую настройку параметров сети. Если это не так, нажмите Command-Shift-P , чтобы Чарльз вручную запрашивал это разрешение.
Нажмите Предоставить привилегии и введите свой пароль, если будет предложено. Charles начинает записывать сетевые события, как только запускается, поэтому вы уже должны видеть появление событий на левой панели.
Примечание . Если вы не видите никаких событий, возможно, вы не предоставили разрешения или уже установили другой прокси-сервер. VPN также может создавать проблемы. См. страницу часто задаваемых вопросов Чарльза для получения помощи по устранению неполадок.
Знакомство с приложением
Пользовательский интерфейс легко понять даже без особого опыта.
За кнопками и меню скрыто множество полезных функций, а на панели инструментов есть несколько элементов, о которых вам следует знать:
- «Метла» очищает текущий сеанс и все записанные действия.
- «Запись/Пауза» отображается красным цветом, когда Чарльз записывает события, и серым, когда он остановлен.
- «Блокировка» запускает/останавливает проксирование SSL.
- Средние кнопки от «Черепахи» до «Галочки» обеспечивают доступ к общим действиям, включая регулирование, точки останова и создание запроса.
- Последние две кнопки обеспечивают доступ к часто используемым инструментам и настройкам.
Пока остановите запись, нажав красную кнопку Запись/Пауза.
Под панелью инструментов находится переключатель между Структура и Последовательность . При выборе последовательности верхняя панель содержит сводку всех записанных сетевых запросов, а основная панель содержит подробную информацию о выбранном запросе.
Со структурой , верхняя панель заменяется левой панелью с теми же данными, сгруппированными по адресам сайтов. Вы по-прежнему можете видеть отдельные запросы, развернув каждый отдельный сайт.
Выберите Последовательность , чтобы просмотреть все события в непрерывном списке, отсортированном по времени. Скорее всего, вы будете проводить большую часть времени на этом экране при отладке собственных приложений.
Чарльз по умолчанию объединяет запрос и ответ на одном экране. Однако вы можете разделить их на отдельные события.
Выберите Charles ▸ Preferences и выберите Viewers . Снимите флажок Объединить запрос и ответ и нажмите OK . Вам нужно перезапустить Чарльза, чтобы изменения вступили в силу.
Попробуйте поковыряться в пользовательском интерфейсе и просмотреть события. Вы заметите одну особенность: вы не можете видеть большинство деталей для событий HTTPS!
SSL/TLS шифрует конфиденциальную информацию запроса и ответа. Вы можете подумать, что это делает Чарльза бесполезным для всех событий HTTPS, но у Чарльза есть хитрый способ обойти шифрование.
Подробнее о прокси
Вам может быть интересно: «Как Чарльз творит чудеса?»
Charles — это прокси-сервер, то есть он находится между вашим приложением и сетевыми подключениями компьютера. Когда Чарльз настроил параметры вашей сети, она изменила конфигурацию вашей сети, чтобы весь трафик проходил через нее. Это позволяет Чарльзу проверять все сетевые события, поступающие на ваш компьютер и исходящие от него.
Прокси-серверы обладают большой властью, но это также подразумевает потенциал для злоупотреблений. Вот почему SSL так важен: шифрование данных не позволяет прокси-серверам и другому ПО промежуточного слоя перехватывать конфиденциальную информацию.
Однако в этом случае вы хотите, чтобы Чарльз отслеживал ваши SSL-сообщения, чтобы вы могли их отлаживать.
SSL/TLS шифрует сообщения с использованием сертификатов, созданных доверенными третьими сторонами, называемыми эмитентами сертификатов.
Charles также может генерировать собственный самозаверяющий сертификат, который можно установить на устройства Mac и iOS для шифрования SSL/TLS. Поскольку этот сертификат не выдан доверенным эмитентом сертификата, вам необходимо явно указать своим устройствам доверять ему. После установки и доверия Чарльз сможет расшифровывать события SSL!
Когда хакеры используют промежуточное ПО для отслеживания сетевых коммуникаций, это называется атакой «человек посередине». В общем, вы НЕ хотите доверять любому случайному сертификату, иначе вы можете поставить под угрозу безопасность вашей сети!
В некоторых случаях хитрая стратегия Чарльза «человек посередине» не сработает. Например, некоторые приложения используют SSL, закрепляющий для дополнительной безопасности. Закрепление SSL означает, что у приложения есть копия открытого ключа веб-сервера, и оно использует ее для проверки сетевых подключений перед обменом данными. Поскольку ключ Чарльза не совпадет, приложение отклонит сообщение.
Помимо регистрации событий, вы также можете использовать Charles для изменения данных на лету, записи их для последующего просмотра и даже имитации плохих сетевых подключений.
Чарльз силен!
Charles Proxy и ваше устройство iOS
В течение многих лет единственным способом прокси-трафика с физического устройства iOS через Charles Proxy было указание устройству iOS отправлять весь сетевой трафик на ваш компьютер. Это по-прежнему обычная практика, которую вы расскажете, но сначала вы проверите 9Приложение 0128 Charles Proxy для iOS !
Откройте App Store на своем устройстве iOS и найдите Charles Proxy . К сожалению, бесплатной версии приложения для iOS нет, поэтому вам придется купить ее, если вы хотите следовать этому разделу.
Примечание : Не хотите покупать приложение для iOS? Не беспокойтесь! Вы можете пропустить этот раздел и продолжить ниже, где вы узнаете, как направить сетевой трафик вашего приложения на ваш Mac.
Установите приложение на свое устройство и откройте его. Начальный экран показывает, что прокси-сервер неактивен. Есть переключатель и обзор некоторых ключевых статистических данных для любого запущенного сеанса. Переключить Переключатель состояния включен.
После запроса разрешения на установку конфигураций VPN нажмите Разрешить .
Статус изменится на Активен .
Коснитесь стрелки индикатора раскрытия Current Session , и приложение перейдет к представлению, сравнимому с верхней панелью настольного приложения. Если вы не видите никаких запросов, переключитесь на Safari и загрузите веб-страницу.
Коснитесь любого из отдельных запросов, и вы перейдете к подробному представлению этого запроса. Как и в настольном приложении, любой зашифрованный трафик SLS/TLS по-прежнему запутывается.
Пришло время это исправить. :]
Установка сертификата Charles
Оставаясь в приложении Charles Proxy, вернитесь к начальному экрану, дважды нажав стрелку назад в левом верхнем углу экрана. Когда прокси-сервер все еще активен, коснитесь шестеренки Настройки в левом верхнем углу экрана. Выберите SSL-прокси .
Внизу этого экрана вы найдете подробные инструкции по установке сертификата CA Charles Proxy и доверию ему. Сначала установите сертификат с помощью кнопки в приложении. Ваше устройство переключится на Safari и запросит разрешение на установку профиля.
Примечание . Если к вашему устройству подключены Apple Watch, появится запрос на установку профиля на устройство или часы. Выберите iPhone .
После установки профиля откройте приложение Настройки . Вы увидите новую опцию Profile Downloaded . Коснитесь его и выберите параметр «Установить » в правом верхнем углу.
Вам будет предложено ввести пароль вашего устройства, если он у вас есть, после чего появится экран подтверждения, предупреждающий вас о том, что этот сертификат не проверен. Нажмите Установите еще раз. Наконец, внизу экрана появится экран действий с окончательным подтверждением. Apple действительно хочет убедиться, что вы хотите установить это. :]
Опять же, не устанавливайте любой случайный сертификат, иначе вы можете поставить под угрозу свою сетевую безопасность!
В конце этого руководства по Charles Proxy вы также удалите этот сертификат.
Доверие сертификату Чарльза
Вы получите экран подтверждения того, что профиль установлен. Затем вам нужно доверять этому сертификату. Еще в Settings , перейдите к General ▸ About ▸ Certificate Trust Settings . Найдите сертификат Charles Proxy и включите переключатель. Появится диалоговое окно с предупреждением. Выберите Продолжить .
Вернитесь в приложение Charles Proxy, и статус сертификата теперь будет Trusted . Включите переключатель Enabled в верхней части экрана.
В Charles вернитесь на главную страницу настроек и сохраните изменения. Откройте текущую сессию и очистите весь трафик, используя значок метлы в левом нижнем углу экрана. Перейдите в Safari и перезагрузите веб-страницу. Затем вернитесь к Charles Proxy. Коснитесь одного из запросов и коснитесь 9.0377 Включить SSL-прокси .
Вернуться к текущему сеансу и еще раз очистить сеанс. Снова откройте Safari и перезагрузите страницу в последний раз. Теперь, если вы вернетесь к Charles Proxy, URL-адрес, для которого вы включили SSL-прокси, будет иметь синий значок сети, а не значок замка.
Сначала коснитесь URL-адреса, чтобы просмотреть полную информацию о каждом запросе.
Затем нажмите на запрос для получения более подробной информации.
Затем нажмите Просмотр тела для просмотра полного тела ответа. Ура! :]
В этом примере использовался Safari, но следующий процесс будет работать при открытии любого приложения на вашем устройстве, включая ваше собственное, когда вы хотите отладить сеть вашего приложения.
Затем вернитесь на страницу запроса и отключите проксирование SSL. Вернитесь к начальному виду и установите статус прокси-сервера Charles на Неактивный , чтобы остановить прокси-трафик.
Проксирование трафика iOS с помощью Charles Proxy для macOS
Что произойдет, если вы захотите проверить трафик на симуляторе или у вас нет приложения Charles Proxy для iOS? Без проблем! Настроить Charles на прокси-трафик с любого компьютера или устройства в вашей сети, включая устройства iOS, очень просто.
Настройка устройства
Откройте Charles Proxy на своем Mac и отключите прокси-сервер macOS, нажав Proxy (раскрывающееся меню) ▸ macOS Proxy to , снимите флажок . Таким образом, вы будете видеть трафик только с вашего устройства iOS.
Затем нажмите Прокси ▸ Настройки прокси , перейдите на вкладку Прокси и запишите номер порта, который по умолчанию должен быть 8888 .
Затем нажмите Справка ▸ Локальный IP-адрес и запишите IP-адрес вашего компьютера. Если имеется более одного IP-адреса, выберите en0 .
Теперь возьмите свое устройство iOS. Откройте Настройки , коснитесь Wi-Fi и убедитесь, что вы подключены к той же сети, что и ваш компьютер. Затем коснитесь ⓘ рядом с вашей сетью Wi-Fi. Прокрутите вниз до раздела HTTP-прокси , выберите Настройка прокси-сервера и нажмите Вручную .
Введите IP-адрес вашего Mac для Сервер и номер порта Charles HTTP Proxy для Порт . Нажмите Сохранить .
Вернитесь к приложению Charles для macOS. Нажмите кнопку Record/Pause , если вы еще не записываете трафик.
Вы должны получить всплывающее предупреждение от Чарльза на вашем Mac с просьбой разрешить подключение вашего устройства iOS. Нажмите Разрешить . Если вы не видите этого сразу, это нормально. Может пройти минута или две, прежде чем он появится.
Теперь вы должны начать видеть активность вашего устройства в Charles! Но обратите внимание, что вы пока не можете просматривать SSL-трафик. Как и в случае с приложением для iOS, вам необходимо установить сертификат от Charles.
Установка сертификата на ваше устройство
Примечание . Эти инструкции также подходят для установки сертификата на симуляторе с двумя отличиями. Во-первых, вы должны повторно включить macOS Proxy в меню Чарльза Proxy . Во-вторых, вы найдете загруженный профиль на странице Settings ▸ General , а не на главной странице настроек.
Все еще на устройстве iOS откройте Safari и перейдите по адресу http://www.charlesproxy. com/getssl. Во всплывающем окне нажмите Разрешить .
Примечание : Опять же, если у вас есть Apple Watch, сопряженные с устройством, iOS предложит вам выбрать между вашим устройством и часами для установки профиля. Выберите Айфон .
В том, что теперь должно быть для вас знакомым путешествием, перейдите в «Настройки» и установите профиль. Нажмите Установить , введите свой пароль (если настроен) и снова нажмите Установить после появления предупреждения. Затем нажмите Установить еще раз. Наконец, нажмите Готово .
Как и прежде, откройте приложение Settings и перейдите к General ▸ About ▸ Certificate Trust Settings . Доверяйте сертификату, который вы только что установили.
Затем в приложении macOS Charles выберите Прокси ▸ Настройки прокси-сервера SSL . Убедитесь, что установлен флажок Enable SSL Proxying , и добавьте значение для трафика, который вы хотите проверить.
Примечание : Если вы не знаете, какие значения здесь указать, вы можете выбрать запрос в приложении с помощью вторичного (правого) щелчка и выбрать Включить SSL-прокси оттуда.
Теперь вы увидите полные тела запроса и ответа для этого соединения.
Отслеживание чужого приложения
Если вы похожи на большинство разработчиков, вам интересно, как все работает. Чарльз поддерживает это любопытство, предоставляя вам инструменты для проверки связи любого приложения .
Зайдите в App Store на своем устройстве, найдите и загрузите Weather Underground . Это бесплатное приложение доступно в большинстве стран. Если оно недоступно или вы хотите попробовать что-то еще, не стесняйтесь использовать другое приложение.
Вы заметите всплеск активности в Чарльзе, пока загружаете Weather Underground. App Store довольно болтливый!
После установки приложения запустите приложение и щелкните значок метла в Чарльзе, чтобы удалить недавнюю активность.
Коснитесь Найдите , введите почтовый индекс
и выберите Beverly Hills в качестве вашего местоположения. Затем нажмите Посмотреть . Если бы вы использовали свое текущее местоположение, URL-адрес, который извлекает приложение, мог бы измениться при изменении вашего местоположения, что может затруднить выполнение некоторых последующих шагов в этом руководстве по Charles Proxy.
На вкладке Структура перечислено множество сайтов! Это список всех действий с вашего устройства iOS.
Перейдите на вкладку Последовательность и введите погода в поле фильтра, чтобы отобразить только погодный трафик.
Теперь вы увидите несколько запросов на api.weather.com . Нажмите один.
В разделе Обзор показаны некоторые сведения о запросе, но не так много, так как вы не включили SSL-прокси для api.weather.com .
Щелкните Прокси-сервер ▸ Настройки прокси-сервера SSL и Добавить . Введите api.weather.com для хоста , оставьте Port пустым и нажмите OK , чтобы закрыть окно.
Вернувшись в приложение Weather Underground, потяните вниз , чтобы обновить и повторно получить данные. Если приложение не обновляется, возможно, вам придется закрыть его в режиме многозадачности и повторить попытку.
Ура! Чарльз показывает незашифрованные запросы!
Найдите запрос с URL-адресом, содержащим /v3/wx/observations/current . Он содержит полезную нагрузку, используемую для заполнения экрана погоды.
Изменение ответа
Время повеселиться и изменить данные до того, как их получит приложение. Можете ли вы заставить приложение сломаться или вести себя смешно?
В Charles, , щелкните правой кнопкой мыши запрос в списке Sequence и выберите Breakpoints во всплывающем списке. Затем нажмите Прокси ▸ Настройки точки останова , дважды щелкните добавленную точку останова и убедитесь, что Query :
пуста. отредактируйте как запрос, так и ответ.
Снова на вашем устройстве потяните вниз , чтобы обновить приложение.
Новая вкладка под названием Точки останова должна появиться вместе с исходящим запросом. Нажмите Выполнить без каких-либо изменений. Через мгновение снова должна появиться вкладка Breakpoints с ответом.
Щелкните вкладку Изменить ответ вверху. Внизу выберите текст JSON . Прокрутите вниз и найдите , температуру и измените ее значение на что-то нереальное, например 98000 . Нажмите Выполнить .
Примечание : если вы слишком долго редактируете запрос или ответ, приложение может молча истечь и никогда ничего не отображать. Если отредактированная температура не отображается, повторите попытку немного быстрее.
98000°F невероятно жарко! Похоже, что приложение не регулирует размер шрифта для температур с более чем пятью цифрами. Это определенная оценка в одну звезду. ;]
Вернувшись в Charles, удалите установленную вами точку останова, выбрав Прокси ▸ Настройки точки останова .
Снимите отметку с записи api.weather.com , чтобы временно отключить ее, или выделите строку и щелкните Удалить , чтобы удалить ее. Потяните вниз для обновления, и температура вернется к норме.
Имитация медленной работы в сети
Теперь вы смоделируете медленную работу в сети. Щелкните значок Tortoise , чтобы начать регулирование. Затем нажмите Proxy ▸ Throttle Settings , чтобы просмотреть доступные параметры. По умолчанию установлено значение 56 кбит/с, что чертовски медленно. Вы также можете настроить параметры здесь, чтобы имитировать потерю данных, проблемы с надежностью и высокую задержку.
Попробуйте обновить приложение, увеличить карту и/или найти другое место. Уж больно медленно, да?
Рекомендуется протестировать собственное приложение в условиях плохой сети. Представьте, что ваши пользователи едут в метро или входят в лифт. Вы не хотите, чтобы ваше приложение теряло данные или, что еще хуже, зависало в этих обстоятельствах.
Network Link Conditioner от Apple предоставляет аналогичные возможности регулирования, но Чарльз позволяет гораздо более точно контролировать сетевые настройки. Например, вы можете применить регулирование только к определенным URL-адресам, чтобы имитировать медленный отклик только ваших серверов, а не всего соединения.
Не забудьте отключить дросселирование , когда закончите с ним. Нет ничего хуже, чем потратить час на отладку только для того, чтобы обнаружить, что вы никогда не отключали дросселирование!
Устранение неполадок в собственных приложениях
Charles Proxy особенно удобен для отладки и тестирования ваших собственных приложений. Например, вы можете проверить ответы сервера, чтобы убедиться, что ключи JSON определены правильно и ожидаемые типы данных возвращаются для всех полей. Вы даже можете использовать регулирование для имитации плохих сетей и проверки тайм-аута вашего приложения и логики обработки ошибок.
Перед сборкой и запуском добавьте следующие два хоста в Charles’s SSL Proxying Settings, как описано выше:
- www.countryflags.io
- restcountries.eu
Затем создайте и запустите образец приложения на своем устройстве или симуляторе.
Это приложение показывает список всех стран с краткой информацией о каждой из них. Но что случилось с иконами? Похоже, произошла ошибка декодирования данных из сервиса. Вы увидите, сможет ли Чарльз помочь вам разобраться в проблеме.
Переключитесь на Charles Proxy (на вашем Mac) и на вкладке Sequence измените фильтр на Countryflags.io . Вы увидите, что все запросы завершились с ошибкой 404, так как ни для одной страны не было найдено изображения:
Как вы можете видеть в Charles, вы используете трехбуквенный код для получения изображения флага страны. Но, согласно countryflags.io, вам нужно использовать двухбуквенный код страны, чтобы он работал!
Теперь измените фильтр на вкладке Sequence на restcountries.eu , чтобы отслеживать, какие данные вы получаете от этой службы, чтобы узнать, можете ли вы получить код:
[{
"имя": "Афганистан",
"topLevelDomain": [".af"],
"alpha2Code": "АФ",
"alpha3Code": "АФГ",
"CallingCodes": ["93"],
"столица": "Кабул",
"altSpellings": ["AF", "Afġānistān"],
"регион": "Азия",
"субрегион": "Южная Азия",
"население": 27657145,
"широта": [33.0, 65.0],
"демоним": "афганец",
"область": 652230.0,
"джини": 27,8,
"часовые пояса": ["UTC+04:30"],
"границы": ["ИРН", "ПАК", "ТКМ", "УЗБ", "ТЖК", "ЧН"],
"nativeName": "Поделиться",
"числовой код": "004",
"валюты": [{
"код": "АФН",
"name": "афганский афгани",
"символ": "؋"
}],
...
Ответ содержит два кода страны: alpha2Code
и alpha3Code
. В Xcode откройте Country.swift и внимательно посмотрите на CodingKeys
. Действительно, код был неправильным!
Заменить следующее:
код случая = "alpha3Code"
С:
код случая = "alpha2Code"
Соберите и снова запустите приложение.
Успехов! Это тривиальная, но хорошая демонстрация того, как просмотр сетевого трафика в Charles Proxy может помочь вам обнаружить ошибки в вашем сетевом коде.
Удаление сертификата Чарльза
В прошлом Чарльз создал общий сертификат для всех устройств, которые его использовали. К счастью, Чарльз теперь создает уникальные сертификаты. Это значительно снижает вероятность атаки «человек посередине» на основе этого сертификата, но технически это все еще возможно. Поэтому вы всегда должны помнить об удалении сертификатов Чарльза, когда закончите с этим.
Сначала удалите сертификат(ы) из macOS. Открыть Keychain Access , который находится в Applications ▸ Utilities . В поле поиска введите Charles Proxy и удалите все сертификаты, найденные при поиске. Скорее всего, нужно удалить только один. Закройте приложение, когда закончите.
Затем удалите сертификаты с вашего устройства iOS. Откройте приложение Settings и перейдите к General ▸ Profiles . В разделе «Профили конфигурации» вы увидите одну или несколько записей для Charles Proxy. Нажмите один , а затем нажмите Удалить профиль . Введите пароль (если требуется) и подтвердите удаление. Повторите это для каждого сертификата Charles Proxy.
Профили и управление устройствами недоступны в симуляторе iOS. Чтобы удалить сертификаты Charles Proxy, перезагрузите симулятор, щелкнув меню Hardware , а затем Erase All Content and Settings… .
Вы также должны отключить прокси-сервер для вашего Wi-Fi-соединения на вашем iPhone, открыв «Настройки» и посетив Wi-Fi , коснитесь кнопки ⓘ , прокрутите вниз до раздела HTTP-прокси , выберите Настроить прокси-сервер , а затем коснитесь Выкл.