Charles как установить сертификат на андроид

Обновлено: 19.09.2024


Для автоматизации управления аккаунтами в Instagram я использую различные библиотеки, которые используют так называемый Private API.

Библиотеки генерируют запросы, притворяясь официальным приложением, но со временем Instagram меняет свой API и библиотеки теряют свою актуальность.

Приходится ждать когда сообщество исправит проблему, либо исправляю её сам.
Изначально идея кажется здравой, сообщество вокруг библиотеки будет помогать в её развитии, но на деле все ждут, что кто-то решит появившуюся проблему.

Нехватка квалификации у отдельных представителей сообщества излишне усложняет код, что приводит к ещё большим проблемам. Кода в библиотеке становится очень много и он хитро переплетен, на исправление уходит много времени, а фрустрация вокруг архитектуры это отдельная тема для разговора.

Reverse Engineering

Чтобы взять под контроль генерацию запросов, можно написать свою библиотеку, для этого нужно постоянно разбирать официальное приложение, декомпилировать его и изучать логику работы.

Это сложный подход, на выходе код плохо читается, а также размазан по всему приложению, приходится по крупицам восстанавливать логику событий для генерации запроса.

Есть решение проще - снифинг трафика от приложения к API, в итоге будет виден сразу любой запрос и не надо собирать его по кусочкам.

Проксирование запросов

В настройках Facebook (для Instagram) можно разрешить пользовательские сертификаты и отключить TLS, этим в статье мы и займемся!

Для решения проблемы мы будем использовать Charles Proxy. С его помощью мы будем мониторить трафик от Android смартфона на десктоп (в моём случае это macOS Mojave).

Установите Charles Proxy, он запустит на вашем десктопе прокси и предложит установить его сертификаты (Help > SSL Proxying > Install Charles Root Certificate on Mobile Device or Remote Browser):


Добавляем Charles в брандмауэр macOS (Настройки > Защита и безопасность > Брандмауэр):


Отлючаем кеширование в Charles (Tools > No Caching):


Теперь нам надо перейти в Researcher Settings on Facebook и включить пользовательские сертфикаты для вашей учетной записи в Instagram:


Установите галочки напротив "Enable user installed Certificate Authorities (CAs) for your Facebook account" и "Enable user installed CAs for your Whitehat Test Accounts.", а также выберите Instagram в "Select on which apps you want to enable the Mobile Settings".

Остановите приложение Instagram на вашем смартфоне и очистите данные для этого приложения. Запустите приложение Instagram снова и нажмите "Войти через Facebook". После чего перейдите в Настройки > Служебные > Whitehat Settings и включите "Allow user installed certificates" и "Do not use TLS 1.3":




Устанавливаем сертификат Charles на смартфон

Помните, ваш смартфон и десктоп должны быть в одной локальной сети!

В настройках WiFi соединения укажите прокси, адрес которого был получен в самом первом скриншоте Charles:


Как только через этот прокси пойдут запросы, Charles предложит подтвердить соединение, жмите Allow:


Откройте браузер на смартфоне и перейдите по ссылке chls.pro/ssl, вам предложат сохранить сертификат. Откройте сертификат через "Установщи к сертифика":


И установите его:


Теперь сделаем любой запрос через приложение Instagram (просто погуляйте по интерфейсу) и помечаем хосты для использования SSL:


Резюме

В результате, у вас должно отобразиться дерево запросов к Private API:


Ну и сами запросы с заголовками тоже будут видны:


Однако, если ваш трафик выглядит примерно так:


Значит вы неверно настроили пользовательские сертификаты, оставьте развернутый комментарий к этой статье и я постараюсь вам помочь!

Но если вы можете прочитать заголовки и тело запроса по прежнему бинарного вида, тогда смотрите заголовок Accept-Encoding. Если в нём указано zstd, то тело запроса можно прочитать с помощью моей утилиты zstdcat.

Погружение в удивительный мир Charles для чайников

В сегодняшней статье я вам поведаю о том, как пользоваться программой Charles, мощным инструментом для тестирования веб-сервисов, в перечень возможностей которого входит перехватывание запросов, их подмена и перенаправление на локальные файлы.

Charles работает и на мобильных устройствах, но в этой статье мы будем рассматривать только версию для Windows. Давайте же начнем!

Установка Charles

Начать следует, конечно же, с установки. Скачиваем программу с официального сайта разработчика.

Установка программы Charles

Программа платная, но есть тестовый период на 30 дней. Даже без покупки программой можно спокойно пользоваться, но время одной сессии будет ограничено 30 минутами, а также частенько на 5-10 секунд будет появляться оверлей.

Charles Web Debugging Proxy

Вы можете получить полную версию программы сами-знаете-какими методами, но мы их рассматривать не будем. Все же лучше поддержать разработчиков!

После скачивания следует запустить exe-файл и произвести инсталляцию. Здесь ничего сложного нет, просто оставьте стандартные настройки установки.

Настройка программы

После установки программу следует настроить. Многие пользователи Charles забывают об этом этапе, а затем кусают локти, пытаясь понять, почему у них ничего не работает. На самом деле настройка программы очень простая, сейчас все покажу!

Для начала нужно установить сертификат программы. Именно из-за него, увы, и возникает большинство проблем, связанных с неработоспособностью программы.

Инструкция по установке сертификата:

Установка Charles

Открываем меню установки сертификата через Help -> SSL Proxying -> Install Root Charles Certificate.

Help -> SSL Proxying -> Install Root Charles Certificate

Жмем «Установить сертификат».

Мастер импорта сертификатов

Здесь выбираем «Локальный компьютер» и жмем «Далее».

Сертификаты Charles

ВАЖНО! На этом этапе выбираем «Поместить все сертификаты в следующее хранилище», жмем «Обзор», затем ОБЯЗАТЕЛЬНО выбираем «Доверенные корневые центры сертификации».

Поместить все сертификаты в следующее хранилище

Жмем «Далее».

Импорт сертификатов

Установку сертификата мы выполнили, теперь нам необходимо включить SSL Proxying и настроить его фильтрацию, чтобы начать перехватывать запросы. Фильтрация определяет, какие именно запросы нужно ловить, но мы сделаем так, чтобы у нас перехватывались все запросы.

SSL Proxying

Открываем Proxy -> SSL Proxying Settings.

SSL Proxying Settings

Ставим галочку на «Enable SSL Proxying», затем под полем «Include» жмем на кнопку «Add».

Enable SSL Proxying

Для отключения фильтрации и сниффинга всего трафика мы просто добавляем звездочку в поле « Host » .

Программа настроена. Теперь рассмотрим ее возможности и функции.

Compose

Нам достаточно выбрать один конкретный запрос и с помощью функции Compose поменять его параметры (заголовок запроса, тело запроса, куки, код и пр.)
Для начала мы можем отделить конкретные запросы от остальных с помощью функции Focus :

Compose

Теперь выбираем нужный нам запрос и выполняем ПКМ -> Compose

Focus Compose Charles

Например, можно подменять некоторые значения в коде, чтобы проверить валидацию на бэкенде. Допустим, поле принимает только числовое значение. Мы используем Compose, передавая в значение поле уже буквы. Если запрос пройдет без ошибок, то это значит, что валидация отсутствует.

Charles

После изменения нужных нам параметров жмем « Execute » и получаем копию запроса с ответом от сервера.

Breakpoint

Данная функция позволяет точнее работать с запросами, вешая на них так называемый «Breakpoint» (точку остановки).

Ниже показано, как через настройки добавить запрос в список Breakpoint. После повторного получения указанного вами запроса в программе откроется отдельная сессия, в которой вы сможете спокойно работать с ним.

Отмечу, что эта функция, по сути, делает автоматический Compose. Вы так же можете менять значения, но вам не придется каждый раз выбирать конкретный запрос.

Breakpoint

Открываем Proxy -> Breakpoint Settings.

 Breakpoint Settings Charles

Ставим галочку на «Enable Breakpoints», затем жмем «Add».

Enable Breakpoints

Заполняем все поля в открывшемся окне (выше пример заполнения).

При повторном получении запроса с такими же данными у вас будет открываться новое окошко, в котором вы сможете работать с пойманным запросом. Удобно!

Программа Charles

Rewrite

Если же ваша задача заключается в подмене параметров множества запросов, то вы можете прибегнуть к функции « Rewrite » .

Rewrite

Открываем Tools -> Rewrite.

Tools -> Rewrite

Ставим галочку на «Enable Rewrite», затем в открывшемся окне под левым полем жмем «Add», а дальше жмем «Add» уже под правым верхним полем.

Enable Rewrite

Заполняем все поля (они идентичны тем, что заполняются при создании Breakpoint).

Новое правило в Чарльз

Затем жмем «Add» уже под правым нижним полем, указываем тип редактирования запроса, заменяемые значения, а также условия замены.

Давайте поймаем запрос и посмотрим на реакцию Charles!

Захват запросов

Charles поймал нужный запрос, а затем заменил все Header одним значением.

Repeat Advanced

Данная функция будет полезна для нагрузочного тестирования. Хоть Charles и не блещет особым потенциалом в данной области, но базовую проверку корректности флуд-контроля вы сможете выполнить.

Ниже подробно показано, как это сделать.

Repeat Advanced

ПКМ по запросу -> Repeat Advanced.

Флуд-контроль

Здесь настраиваем все в соответствии с указаниями на приложенной выше картинке.

Запросы в Charles

Должно открыться новое окно, где отправляются запросы.

Map Local

Последняя функция в сегодняшней статье. Позволяет работать с локальными файлами.

Демонстрация инструмента ниже.

Map Local

ПКМ по запросу -> Map Local.

Карта запросов

В открывшемся окне у нас идут знакомые поля. Жмем «Choose» и выбираем локальный файл, после чего жмем « OK » .

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

Локальный файл в Charles

Надеюсь, эта статья помогла вам разобраться в основах Charles. Это действительно мощный и довольно простой инструмент для тестирования. Спасибо за внимание!

Документацию можно почитать на официальном сайте , а в данной заметке я покажу основные кейсы его использования.

Установка и предварительная настройка

Установка и запуск

Скачайте и установите Charles .

При первом запуске Charles скорее всего попросит разрешения внести изменения в сетевые настройки вашего компьютера, согласитесь.

Настройка прокси

Далее перейдите в Proxy – Access Control Setting, нажмите кнопку Add и добавьте IP-адрес 0.0.0.0/0.

Charles Access Control Setting

Charles Location

Установите сертификаты на компьютер: Help – SSL Proxying – Install Charles Root Certificate.

Сharles Certificates

Укажите порт: Proxy – Proxy Settings – вкладка Proxies – Port: 8888.

Charles Port

Проксирование трафика веб-браузера

Если не хотите видеть запросы с ПК, перейдите на вкладку MacOS (Windows) и снимите чекбоксы. Но если целью является изучение трафика из браузера, наоборот, удостоверьтесь, что чекбоксы установлены.

Charles Proxy Settings

Когда закончите с настройками прокси, перезапустите Charles.

Настройка прокси на устройстве

Если целью является изучение трафика с устройства, например со смартфона, нужно выполнить на нем дополнительные настройки.

Компьютер с Charles и устройство должны находиться в одной сети.

На устройстве, в настройках сети или Wi-Fi, укажите прокси-сервер: IP-адрес компьютера с запущенным Charles и порт 8888, или другой, который был указан при настройке прокси.

Быстро узнать IP-адрес компьютера с запущенным Charles можно через пункт меню Help – Local IP Address.

IP address Charles

Для iPhone откройте Настройки (Settings), перейдите в настройки Wi-Fi, выберите активную Wi-Fi сеть, пролистайте экран вниз и выберите пункт Настройка прокси (Configure Proxy). Метод определения выберите Вручную (Manual) и укажите IP-адрес и порт.

Proxy iPhone

Далее нужно установить сертификат прокси-сервера.

Установите скачанный сертификат Charles. Процесс установки зависит от используемого устройства и может различаться.

Например, чтобы установить сертификат на iPhone откройте Настройки (Settings), перейдите в Основные (General), пролистайте вниз и выберите пункт Профили и управление устройством (Profiles & Device Management). В открывшемся меню найдите загруженный профиль сертификата, откройте его, а затем установите.

Profiles iPhone

Дополнительно может потребоваться установить доверие сертификату. Откройте Настройки (Settings) – Основные – Об этом устройстве (About), пролистайте вниз до конца, выберите пункт Доверие сертификатов (Certificate Trust Settings). В открывшемся окне отметьте переключателем сертификат, которому хотите дать доверие.

Certificate Trust Settings

Для Android действия будут похожими, за исключением того, что дополнительно не потребуется указывать доверие сертификату, его достаточно будет лишь установить.

Подробнее про установку сертификатов можно прочитать в документации Charles.

Теперь можно проксировать и изучать трафик.

Как смотреть трафик

Запустите Charles. На устройстве или в браузере откройте интересующий сайт или приложение. При выполнении действий на клиенте, запросы с него и ответы от сервера будут логироваться в Charles.

В режиме Structure в левой части окна отображается список запросов, сгруппированный по хостам. Выделив элемент хоста, в правой части окна будет выведена подробная информация о запросе (сверху) и ответе (снизу), в том числе метод, заголовки, куки, запрос, ответ, параметры и прочая информация.

Structure View

В режиме Sequence запросы отображаются без группировки, последовательно.

Charles Sequence View

Чтобы исключить из отображения ненужные хосты, удобно пользоваться фильтром (поле под списком хостов).

Выделив хост, в контекстном меню можно включить режим Focus, при котором запросы к интересующим хостам будут группироваться вместе, а остальные скрыты в отдельную группу.

Charles Focus

Не забывайте пользоваться Поиском (Edit – Find или Cmd+F). Он поможет быстро найти интересующий параметр или подстроку среди перехваченных запросов.

Charles Find

На что стоит обращать внимание:

  • запрос уходит на верный URL;
  • допустимое время между действием, отправкой запроса и получением ответа;
  • метод, код ответа, тело, параметры cоответствуют ожидаемым, значения не пустые;
  • формат данных;
  • запрос не дублируется;
  • данные отобразились на клиенте.

Как менять запросы и ответы

Задача: на лету изменить параметр в заголовке или в теле запроса и посмотреть, что вернёт сервер, либо наоборот, модифицировать ответ сервера, чтобы проверить как поведет себя клиент.

В этом случае можно использовать инструмент Rewrite (Tools – Rewrite – галочка Enable Rewrite.

Добавьте новое правило, введите хост (или оставьте пустым, тогда правило будет действовать для всех хостов), затем заполните Rewrite Rule, где укажите что на что необходимо заменить.

В примере ниже, значение поля bonus в теле ответа будет заменено со 100 на 5000.

Еще задача: допустим есть лента с контентом (видео, реклама, музыка) и при тестировании нужно быстро изменить его источник без вмешательства разработчика.

Rewrite Charles

В разделе Match можно использовать регулярные выражения.

Аналогичным способом через Rewrite можно изменять, добавлять, удалять заголовки, менять коды ответа сервера, хосты и url.

Как вручную отредактировать запрос

Задача: перехватить запрос (ответ) и перед отправкой (приемом) его отредактировать. Отличие от предыдущей задачи заключается в том, что в ней данные менялись на лету по заранее заданному шаблону, здесь же редактирование осуществляется вручную.

Запросы можно редактировать используя инструмент Compose. Прежде нужно, чтобы запрос выполнился хотя бы один раз. Найдите его среди остальных запросов. В контекстном меню выберите Compose.

Charles Compose

В открывшемся окне можно изменить тело запроса, метод, протокол, url, параметры, заголовки и куки. Затем нужно нажать кнопку Execute и запрос будет отправлен с новыми данными.

Charles Execute

Инструмент Repeat в контекстном меню запроса отправит его на сервер еще раз.

Repeat Advanced – похож на Repeat, однако позволяет указать количество отправляемых запросов и задержку между ними. Данный функционал может быть полезен при проверке сервера на флуд.

С помощью инструмента Breakpoints (точки остановка) можно перехватывать и изменять не только запросы, но так же и ответы от сервера, прежде чем они попадут на клиент.

Для начала нужно включить возможность использования Breakpoints (Proxy – Breakpoint Settings – Enable Breakpoints).

Далее нужно указать URL запроса, который в случае выполнения должен быть перехвачен. Это можно сделать в том же окне Breakpoint Settings, либо повесить Breakpoint через контекстное меню, выбрав ранее выполненный запрос.

Перед выполнением запроса он будет остановлен и вы сможете отредактировать его тело, метод, протокол, url, параметры, заголовки и куки.

Charles Breakpoints

Когда запрос будет отправлен, ответ так же будет перехвачен, его аналогичным способом можно отредактировать.

Как подменить хост в API

Задача: подменить продовый хост с API на тестовый. Это можно сделать двумя способами.

Первый, через инструмент Rewrite, подобно тому, как описано в предыдущем разделе.

Host Charles

Второй способ подменить API, заключается в использовании инструмента Map Remote (Tools – Map Remote).

Charles Map Remote

В зависимости от задачи можно подменить хост целиком, его часть или только параметры.

Как подменить код ответа сервера

Задача: проверить как поведет себя клиент при неожиданном коде ответа от сервера.

Как и в предыдущих двух примерах, тут подойдет инструмент Rewrite (Tools – Rewrite).

Charles Response Status

Как эмулировать недоступность сервера

Задача: проверить как поведет себя клиент при недоступности хоста.

Используя инструмент Block List (Tools – Block List), можно заблокировать доступ клиента к указанному хосту. На выбор разрыв соединения либо 403 код ответа.

Charles Block List

Инструмент Allow List (Tools – Allow List) наоборот блокирует все хосты кроме разрешенных.

Как замокать ручку или подменить файл

Задача: подменить ответ от сервера на заранее подготовленный, сохраненный локально, например, чтобы замокать ответ ручки или заменить скрипт.

Для этих целей можно использовать инструмент Map Local (Tools – Map Local).

Charles Mapping

В настройках укажите ручку или файл на сервере, а также локальный файл, который будет использован вместо них. Поддерживаются форматы HTML, CSS, JSON, XML и медиафайлы.

Как эмулировать проблемы в сети

Задача: посмотреть, как работает сервис в различных сетевых условиях.

Для этого предназначен инструмент Throttle (Proxy – Throttle Settings).

Charles Throttle

Здесь можно включить сетевые ограничения для определенных или всех хостов, а так же задать различные сетевые параметры.

  • Bandwidth – пропускная способность;
  • Utilisation – эффективность использования пропускной способности;
  • Latency – задержка в миллисекундах между клиентом и сервером;
  • MTU – максимальный объём данных за одну итерацию;
  • Reliability – вероятность, что соединение не удастся;
  • Stability – вероятность, что соединение будет нестабильным.

Так же можно использовать готовые предустановки из списка.

Как раздать VPN

Задача: дать доступ другому устройству в корпоративную сеть.

Если компьютер с установленным Charles имеет доступ к сети VPN, то и устройства, трафик которых проксируется, будут иметь доступ к той же сети.

Другие полезные функции

Инструмент Block Cookies – предотвращает получение клиентом запросов на установку cookie с сервера.

Инструмент No Caching предотвращает кэширование через заголовки.

MacOS Proxy или Windows Proxy разрешает или запрещает проксирование трафика из браузера, установленного на том же компьютере, что и Charles.

Инструмент Port Forwarding (проброс портов) позволяет пересылать запросы с одного порта на другой.

DNS Spoofing – перенаправляет запрос с доменного имени на указанный IP-адрес.

Mirror – автоматически сохраняет в указанную папку все ответы, возвращаемые в Charles. Затем их можно использовать как моки.

Устранение проблем

Большая часть функций Charles не будет работать если не установлены или не корректно установлены сертификаты. Это самая распространенная проблема. Вторая проблема может быть в том, что для связи клиента и сервера используется SSL соединение, но оно выключено в Charles, соответсвенно он не может его расшифровать, тем более изменить запрос или ответ.

Убедитесь, что ответ в Charles отображается в незашифрованном виде, как на скриншоте ниже. Это значит базовые настройки выполнены верно, сертификаты установлены, SSL Proxying включен.

Not Encrypted

Если же в ответе нечитаемый текст, как на скриншоте ниже, часть инструментов Charles работать не будет.

Encrypted

В этом случае проверьте, что выполнили все рекомендации по настройке описанные в начале данной статьи.

В частности удостоверьтесь, что проксирование включено для SSL соединений. Галочка в Enable SSL Proxying в Proxy – SSL Proxying Settings должна быть установлена, указана локация.

Сертификаты Charles должны быть установлены в системе (Help – SSL Proxying – Install Charles Root Certificate).

Сертификаты Charles должны быть установлены на клиенте, если в качестве него выступает другое устройство.

Если клиентом является iPhone, убедитесь, что кроме того, что сертификат установлен, ему так же выдано доверие (это один из пунктов, который часто пропускают).

Дополнительную информацию про установку сертификатов можно получить в документации Charles.

Если клиентом является браузер, установленный на том же компьютере, где и Charles убедитесь, что разрешено проксирование с локального устройства (Proxy – MacOS Proxy или Windows Proxy).

Делитесь интересными кейсами использования Charles и я добавлю их в статью.

Полезные ссылки

На этом всё. Но вы можете поддержать проект. Даже небольшая сумма поможет нам писать больше полезных статей.

Если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.

С компьютера запустите Charles:

enter image description here

открыть Настройки прокси: Прокси - > Настройки прокси, вкладка Прокси, установите флажок " Включить прозрачное http-проксирование "и запомните" порт " в сердце.

Прокси SSL Настройки:прокси -> прокси-сервера SSL параметры, вкладка SSL-Прокси, Проверьте "включить SSL прокси", и добавить . в местах:

enter image description here

Открыть Настройки Управления Доступом: Прокси - > Настройки Управления Доступом. Добавьте локальную подсеть для авторизации компьютеров в локальной сети для использования прокси-сервера с другого компьютера / мобильного телефона.

В Android Телефон:

enter image description here

настройка мобильного телефона: перейдите в Настройки - > Беспроводные сети - > WiFi - > подключение или изменение сети, заполните IP-адрес компьютера и порт(8888):

В "имя сертификата" введите то, что вы хочу!--5-->

enter image description here

примите предупреждение безопасности и установите сертификат. Если вы установите его успешно, то вы, вероятно, увидите sth так: В телефоне Настройки - > Безопасность - > доверенные учетные данные:

Edit - этот ответ был для более ранней версии Charles. См. ответ @semicircle21 ниже для правильных шагов для v3.10.x-намного проще, чем этот подход. :-)

для чего это стоит, вот пошаговые инструкции для этого. Они должны одинаково хорошо применяться и в iOS:

вы должны быть возможность видеть файлы SSL в Charles. Если вы хотите перехватить и изменить значения, вы можете использовать инструмент "локальная карта", который действительно потрясающий:

  1. в Charles перейдите в инструменты > карта Local
  2. выбрать "Добавить запись"
  3. введите значения для файла, который вы хотите заменить
  4. в "Local path" выберите файл, который вы хотите загрузить приложение вместо
  5. нажмите OK
  6. убедитесь, что запись выбрана, и нажмите кнопку OK
  7. выполнить ваши app
  8. вы должны увидеть в "Заметках", что ваш файл загружается вместо живого

Спасибо за ответ @bkurzius, и это обновление для Чарльза 3.10+. (Причина здесь)

вам нужно будет установить charles.сертификат crt для вашего устройства.

надеюсь, что это поможет настроить Чарльза внутри вашего проекта приложения не на каждом устройстве Android.

Я понял вопрос. Это потому, что у Charles 3.7 есть некоторые ошибки для устройств Android. Я обновился до бета-версии Charles 3.8 и, похоже, отлично работает для меня.

для нового эмулятора может быть полезно запустить из командной строки с помощью:

убедитесь, что вы следуете совету @User9527 выше, а также для остальной части установки

Читайте также: