Установка сертификата на устройствах с Android 11+
В этой статье рассказывается об AdGuard для Android — многофункциональном блокировщике рекламы, который защищает ваше устройство на системном уровне. Чтобы увидеть, как он работает, скачайте приложение AdGuard
Чтобы фильтровать HTTPS-трафик (что крайне важно, поскольку большая часть рекламы передаётся по протоколу HTTPS), AdGuard необходимо установить сертификат в пользовательское хранилище устройства. На старых версиях Android это происходило автоматически, но на Android 11 и выше приходится устанавливать его вручную.
Как установить сертификат AdGuard:
- В уведомлении «HTTPS-фильтрация отключена» нажмите Включить.
- Появятся три экрана с объяснениями:
- Зачем фильтровать HTTPS-трафик
- Почему эта фильтрация безопасна
- Почему сертификат AdGuard необходим
На этих экранах последовательно нажмите Далее → Далее → Сохранить сертификат.
Всё готово! Когда сертификат будет установлен, HTTPS-фильтрация включится автоматически.
Эти шаги основываются на смартфоне Google Pixel 4. В других устройствах Android названия настроек могут отличаться. Возможно, вам поможет ввести слово «сертификат» в строке поиска по настройкам.
Если у вас возникли проблемы при ручной установке сертификата (например, вы установили сертификат, но приложение продолжает его игнорировать), вы можете воспользоваться одним из решений ниже.
- Перезапустите AdGuard.
- Попробуйте ещё раз установить правильный сертификат (AdGuard Personal CA).
Если вы по-прежнему сталкиваетесь с проблемой и не можете установить сертификат, напишите нашей команде поддержки по адресу support@adguard.com.
Туториал: HTTPs запросы с iOS и Android девайсов не расшифровываются в Fiddler
При работе с Fiddler часто возникают проблемы, которые решаются перезапуском сниффера, перезагрузкой компьютера или девайса, с которого сниффится трафик. Но бывает и такое, что перезапуском проблема не решилась и даже полной переустановкой фиддлера. Это статья не о чем-то новом и неизведанном, а скорее туториал, который поможет вам, когда вы всё сделали правильно, но «ничего не работает».
Для начала стоит проверить (даже, если уже проверяли) настройки Fiddler и девайса, с которого вы хотите сниффить трафик.
Настройка Fiddler на Windows для сниффинга трафика с iOS и Android девайсов
- Открыть Fiddler
- Перейти Tools -> Options
- Во вкладке Connections установить галочку Allow remote computers to connect

- Перезагрузить Fiddler, чтобы изменения вступили в силу
- Во вкладке HTTPS: 1) установить галочку на Capture HTTPS CONNECTs 2) установить галочку на Decrypt HTTPS traffic 3) в появившемся окне “Trust the Fiddler Root certificate” кликнуть Yes 4) в окне Security Warning кликнуть Yes 5) в окне Add certificate to the Machine Root List? Нажать Yes 6) в появившемся окне “Do you want to allow this app to make changes to your device?” выбрать Yes 7) установить галочку Ignore server certificate errors (unsafe)

- В остальных вкладках оставить всё по дефолту, нажать ОК
- В верхнем тулбаре активировать Stream и Decode

Настройка iOS девайса для работы с Fiddler
- Открыть Settings
- Тапнуть пункт Wi-Fi
- Тапнуть иконку i у сети, у которой подключен девайс
- Проскроллить вниз и перейти в пункт Configure Proxy
- Выбрать Manual
- В поле Server ввести свой IP адрес
- В поле Port ввести свой Порт, тапнуть Save
- Открыть браузер и ввести в адресную строку http://ipv4.fiddler:. Например, если порт 8888, то ссылка будет выглядеть так http://ipv4.fiddler:8888ИЛИ ввести в адресную строку :, например, 192.168.162.202:8888
- Тапнуть на ссылку “FiddlerRoot certificate” и загрузить сертификат
- Перейти в Settings -> General -> Profile и установить скачанный сертификат
- Перейти в Settings -> General -> About -> Certificate Trust Settings и поставить чекбокс у нашего сертификата
Настройка Android девайса для работы с Fiddler
- Открыть Settings
- Тапнуть Wi-Fi
- Тапнуть и удерживать сеть Wi-Fi, к которой подключен девайс
- Выбрать Modify Network
- Выбрать “Show advanced options”
- Тапнуть Proxy и выбрать Manual
- В поле Server ввести свой IP адрес
- В поле Port ввести свой Порт, тапнуть Save
- Открыть браузер и ввести в адресную строку http://ipv4.fiddler:. Например, если порт 8888, то ссылка будет выглядеть так http://ipv4.fiddler:8888ИЛИ ввести в адресную строку :, например, 192.168.162.202:8888
- Тапнуть на ссылку “FiddlerRoot certificate”, сертификат загрузится на девайс
- Установка должна произойти автоматически, если сертификат не установился, то свайпнуть вниз и тапнуть иконку Settings
- Перейти Personal -> Security
- Перейти в Credential Storage и тапнуть “Install from storage”
- Тапнуть файл FiddlerRoot.cer
- (Опционально) Ввести имя сертификата, например, FiddlerRoot
- Проверить эту конфигурацию можно Trusted credentials -> User, там должен отобразится установленный сертификат
Запросы HTTPs остаются зашифрованными
- Нужно здесь скачать плагин генерации сертификатов “CertMaker for iOS and Android”
- Перейти в Fiddler в Tools -> Options -> HTTPS и в Certificates generated by выбрать CertMarker
- Перезапустить Fiddler
- На девайс повторно скачать сертификат с http://ipv4.fiddler:, т.к. он будет генерироваться заново
- Выполнить установку сертификата на девайсе
После всех вышеописанных манипуляций Fiddler будет послушно декодировать необходимые HTTPs запросы с девайса.
Как настроить Charles
Приложение Charles Proxy — большой помощник и тестировщику, и разработчику. Мы хотим рассказать вам про функции «Чарльза», показать, как им пользуемся в своей работе. Вторую часть нашего рассказа про функциональность Charles можно почитать по ссылке. Но для начала поможем разобраться с приложением и правильно его настроить.

Установка и настройка Charles
Скачать последнюю версию можно с официального сайта приложения.
Без лицензии вам будет доступна пробная версия на 30 дней. После истечения этого срока появятся ограничения — функции не заблокируются полностью, но использование ограничено по времени.
Затем нужно установить сертификат. Для этого выполните следующие действия:
- Пройдите путь Help → SSL Proxying → Install Charles Root Certificate.
- Найдите в KeyChain сертификат Charles Proxy.
- Сделайте его доверенным, изменив настройки с дефолтных Use System Defaults на Always Trust.
Подключение девайса
Charles можно установить в связке с ПК и с мобильным устройством. Для этого подключаем девайс и ноутбук к одной сети Wi-Fi. Для MacBook это настраивается следующим образом:
1. На девайсе в настройках Wi-Fi переходим в дополнительные настройки и подключаем proxy.
2. В Proxy вводим IP ноутбука и порт 8888 (он же дефолтный).
3. На экране MacBook после подключения девайса появится диалоговое окно, нажмите Allow.
На разных девайсах настройки выглядят по-разному, обратите внимание. Например, на Android нужно пройти путем Настройки → Подключения → Wi-Fi → Выбрать сеть → Дополнительно → Прокси → Вручную

Нужные параметры можно посмотреть в Charles по пути: Help → SSL Proxying → Install Root Certificate on a Mobile Device or Remote Browser. Также IP можно посмотреть в Help → Local IP Address.
Установка сертификата на девайс
Прежде чем начать работу, нужно установить на свой девайс сертификат, скачав его в браузере по ссылке chls.pro/ssl. Используйте Safari для iOS и системный браузер для Android.

Если скачивание сертификата не началось автоматически, нужно в установленном на ноутбуке Charles найти запросы http://ssl.charles и http://chls.pro, правым кликом по каждому выбрать Enable SSL Proxying и пройти по ссылке.
Android: Если установка сертификата после загрузки не произошла, ищем «Сертификаты» в настройках девайса, выбираем пункт меню Установка ЦА/ЦС сертификатов безопасности.

Ищем скачанный на девайс сертификат и устанавливаем его. Если потребуется задать PIN при установке, то задать любой.
На iOS: ищем Настройки → Профили → Установить сертификат.
Важно! Включите доверие для сертификата: Основные → Об этом устройстве → Доверие сертификатам → Включить доверие для вашего сертификата.
Финальные настройки
Перед началом работы отключите Proxy на ноутбуке: Proxy → Proxy Settings → MacOS → уберите галочки с чекбоксов Enable MacOS Proxy и Enable MacOS Proxy on launch.
Это нужно, чтобы не видеть запросы с браузеров самого ноутбука.
Затем включаем Proxy → Start Proxying и Start Recording. На нужных запросах выбираем правым кликом Enable SSL Proxying.
FAQ
Что делать, если не скачивается сертификат?
- Проверьте, включен ли SSL Proxying на оба запроса http://ssl.charles и http://chls.pro.
- Проверьте настройки браузера на загрузку файлов.
- Проверьте, не включен ли у вас VPN, так как с ним весь трафик идет в обход Charles.
Что делать, если не видно запросов – везде Unknown?
- Проверьте, установлен ли сертификат.
- Включите SSL Proxying на конкретный запрос через правый клик – Enable SSL Proxying.
- Проверьте Allow List и Block List в меню Tools. Оба этих листа могут запрещать соединение для вашего запроса. Лучше воздержаться от их использования, если вы не очень понимаете их суть.
- На Android в сборке клиента должны быть прописаны манифесты для Charles Proxy.
- Если запрос зашифрован, то его данные увидеть нельзя.
Что делать, если сделал все по инструкции, а запросы не вижу?
- Проверьте прописанный IP своего MacBook и порт
- VPN на девайсе должен быть выключен и весь трафик должен идти через Charles.
Что делать, если мне нужен VPN для работы?
Ничего страшного, VPN настраивается на MacBook, а девайс подключается через прокси к нему, получая преимущества Charles и VPN.
Что делать, если интернет не работает без Charles?
Откройте «Системные настройки». Далее следующий путь: Сеть → Ваша сеть → Дополнительно → Таб Прокси → Снять галочки с 2 чекбоксов у «Веб-прокси» и «Защищенный веб-прокси» → Ок → Применить
Что делать, если Charles Proxy вылетает каждые 30 минут и постоянно показывает баннер?
Если у вас установлена триал-версия, то она ограничивает время сессии на 30 минут. Можно перезапустить и пользоваться дальше, не забывая про ограничения пробной версии.
Переустановка сертификата
Сертификат Charles действует год. По истечении его необходимо переустановить. Для этого сбрасываем старый сертификат на вашем Маке: Help → SSL Proxying → Reset Charles Root Certificate.
Удаляем старый сертификат с устройства в настройках профиля (iOS) или ЦА сертификатах (Android). Проходим установку сертификата заново, как это описано выше.
Интерфейс
Перед тем, как приступать к работе, рассмотрим основные элементы управления и режимы просмотра запросов и ответов. У нас есть кнопки быстрого доступа включения/отключения некоторых настроек.

- Clear the current Session — очищает историю запросов.
- Start/Stop Recording — включает или выключает записи запросов.
- Start/Stop SSL Proxying — включает или выключает просмотр запросов.
- Start/Stop Throttling — включает или выключает троттлинг соединения.
- Enable/Disable Breakpoints — включает или выключает брейкпоинты по запросам.
В приложении два режима отображения запросов: Structure и Sequence.
Режим Structure
Можно отображать запросы в виде структурированных папок.

Дерево запросов — список запросов, который был отправлен приложением. Поле запроса — информация о запросе. Поле ответа — ответ сервера. Фильтр — поле для фильтрации запросов.
Включите Focus на запросы, с которыми чаще работаете (кликаем правой кнопкой мыши по домену запроса или конкретному запросу, и в выпадающем меню выбираем Focus). Это поможет отслеживать только необходимые домены/запросы, группируя оставшиеся в Other Hosts.
Сессии можно сохранять и загружать через File → Import/Export Session. Формат для сохранения .chls
Режим Sequence
Здесь запросы отображаются в режиме очередности

Если ранее были добавлены запросы в Focus, то в режиме Sequence можно поставить чекбокс Focused и наблюдать очередность только избранных запросов.
Просмотр информации о запросе идентичен и для Structure, и для Sequence.

Overview — информация о запросе (статус, время, метод и т д). Полная информация, которая доступна о запросе.

Contents — содержимое запроса с хедерами, куками, json-ами и т д. Основная рабочая вкладка, на которой смотрим содержимое запросов/ответов. Для ответов чаще всего используются Headers и JSON Text.

По двойному клику по полю открывается отдельное окно с необходимым значением. Удобно использовать для просмотра больших данных или для копирования.
Summary — сравнительная информация о группе запросов. Удобно сравнивать время, размер и другие данные о запросах.

Chart — сравнительная диаграмма о времени выполнения группы запросов.По сути, это очередность запросов со временем их выполнения. Будет полезна, если надо прикинуть, сколько относительно друг друга занимают по времени запросы.

Notes — личные заметки о запросе.В заметке можно написать, что делает запрос, какие-то данные для подмены или просто выразить свое негодование.

Сама заметка теперь будет отображаться во вкладке Overview запроса.

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

На скриншоте выше можно увидеть, что в данный момент включена запись запросов Recording, включены правила подмены Rewrite, включена локальная подмена Map Local на запрос, а также выставлены Breakpoints на некоторые запросы.
Итак, мы разобрались, как настроить Charles, посмотрели на его интерфейс, и теперь — наконец-то! — можем начинать работу. Но об этом в следующей статье от студии мобильной разработки CleverPumpkin.
- charles proxy
- инструкция
- Блог компании CleverPumpkin
- Тестирование IT-систем
- Разработка мобильных приложений
Безопасная отладка вашего приложения в продакшене
Production (продакшен, прод) — версия продукта, прошедшая все стадии тестирования и выложена онлайн / установлена клиенту.
Проведите пальцем вверх, проведите пальцем вниз, покружитесь и постучите ногой в ритме “Макарена”. Теперь у вас есть доступ к ✨ секретному меню разработчика ✨.
Некоторые из самых ранних известных чит-кодов и секретных меню отладки относятся к 1980-м годам, но с учетом современных технологий и безопасности — какой вариант лучше всего подходит для вашего приложения?
Как инженеры, мы тратим так много времени на создание наилучшего опыта, который только можно вообразить, для пользователя; но как много времени уходит на то, чтобы упростить выполнение цикла для нас? Хорошо разработанное меню отладчика может сэкономить часы на тестировании новых функций или устранении существующих ошибок.
Возможности бесконечны, они ограничены только вашим воображением и усилиями, которые вы готовы приложить. Изменение переключателей функций, сброс кешей, смена среды разработки, просмотр логов или текущего состояния — вот лишь несколько идей того, чего можно достичь.
В Sidetrack наше меню отладки в приложении позволяет нам быстро просматривать отдельные кэшированные сообщения, которые используются для проецирования последней служебной информации. Поскольку одно вью в нашем приложении может представлять собой сумму 100 различных сообщений, одна ошибка в начале цепочки может быстро привести к отображению неверной информации во многих местах.
Но где живет меню отладки и кто должен иметь к нему доступ? В зависимости от ваших личных факторов риска, типа проблем, с которыми вы обычно сталкиваетесь, и ваших методов разработки, вам может пригодиться одно или несколько решений из этого поста.
Варианты на выбор
Симулятор и Отладочные Сборки
Используя директивы компилятора, вы можете определить код, который не должен компилироваться в определенные сборки вашего приложения.
Например, #if DEBUG гарантирует, что обернутый код не будет включен в релизные сборки вашего приложения. Аналогично, #if targetEnvironment(simulator) будет компилироваться только когда таргетом сборки вы назначаете свой iOS-симулятор.
Это очень простое решение, и у конечных пользователей нет возможности получить доступ к этой функции, поскольку ее просто не будет в их версии приложения. Однако, если ваша цель — получить доступ к меню отладки в продакшене, этот вариант не поможет.
Когда SwiftUI был выпущен в начальной стадии, превью были заключены в директиву #if DEBUG, чтобы они не раздували двоичный файл App Store. Начиная с Xcode 11 Apple делает это автоматически. Аналогично, такие инструменты, как FLEX и Inject, отключают определенные функциональные возможности при компиляции для релизных сборок, демонстрируя хороший пример использования.
TestFlight
Проверив URL-расписку в App Store, можно определить, была ли установлена сборка вашего приложения через TestFlight. Это может быть полезно для включения возможностей отладки для определенных подписанных пользователей.
Однако нет различий между внутренними группами TestFlight и различными внешними группами TestFlight (что может означать предоставление доступа к большей группе, чем вы предполагали). Кроме того, это решение не работает для приложений Catalyst или приложений, распространяемых через TestFlight для macOS. Он официально не поддерживается Apple и может отказать в любой момент.
Вы можете рассмотреть возможность создания отдельной конфигурации сборки TestFlight. Это позволит вам использовать директивы компилятора (похожие на #if DEBUG) и создавать специальные сборки только для TestFlight. Вы можете отправлять разные сборки разным группам, что даст вам полный контроль.
Однако это приводит к большим накладным расходам, и можно легко случайно отправить в App Store не ту сборку. Подобное наблюдалось неоднократно ранее, даже самой Apple, которая много раз случайно отправляла сборку, содержащую инструменты разработчика, в открытый доступ.
Жесты — это искусство скрывать функциональность на виду, просто за счет незаметности. Пользователи привыкли к некоторому количеству жестов, но вы определенно можете назначить дополнительный шаг для разблокировки меню отладки, если пользователь знает правильную комбинацию.
Konami Code — это чит-код, состоящий из последовательности 10 нажатий кнопок, ставший популярным в 1980-х годах благодаря игре Contra, ввод которой давал игроку 30 дополнительных жизней. В настоящее время он был адаптирован для мобильных устройств с использованием жестов смахивания. Есть много библиотек с открытым исходным кодом, обеспечивающих такое поведение — я знаю это, потому что, если вы проверите страницу благодарностей с открытым исходным кодом ряда крупных приложений, вы можете просто найти ссылку на нее.
Жесты вполне могут выполнять свою работу, но они небезопасны и на них можно легко наткнуться. Если вы используете их, пожалуйста, подумайте о пользователях невизуальных вспомогательных технологий и о том, как это может повлиять на их работу.
Схемы URL и Вводы Текста
Определить пользовательскую схему URL в iOS так же просто, как добавить пару строк в ваш Info.plist и обработать URL в файле AppDelegate или блоке onOpenURL в SwiftUI. Если у вас есть поле ввода текста, например строка поиска, вместо URL вы можете использовать его значение.
Это позволит тестовому пользователю ввести URL, например sidetrack://super-secret-debug-menu, в приложение, такое как Safari, и ваше приложение предоставит ему доступ к меню отладки.
Однако подобные секретные строки и URL-адреса могут быть легко обнаружены, если пользователь достаточно решителен. Например, в приложении iOS Phone есть несколько обнаруженных номеров, при вызове которых открывается доступ к скрытым функциям.
Тестовые Аккаунты
Если ваше приложение поддерживает вход в систему, вы можете обнаружить, что использование этой системы — отличный способ разблокировать функции отладки для определенных пользователей. Это может быть достигнуто либо путем жесткого кодирования идентификаторов пользователей в приложении (что потребует изменения в релизной версии приложения), либо путем добавления нового параметра в отклик профиля пользователя (однако опасайтесь достоверности отклика!)
Часто это может быть очень простой вариант, построенный поверх существующей функциональности. Однако не у всех есть возможность входа в их приложении, а в действительности, вы все равно можете захотеть получить доступ к меню отладки, когда вы не вошли в систему.
Доверенные Профили (Наше Решение)
Решение, к которому мы пришли в Sidetrack, заключалось в использовании профиля конфигурации. Это особый вид сертификата, который можно создать с помощью Keychain Access и установить на свои мобильные устройства в качестве пользовательского профиля. Затем ваше мобильное приложение может определить наличие этого пользовательского профиля, проверив файл сертификата, встроенный в двоичный файл приложения.
Несмотря на небольшое усложнение, это позволяет решить все основные проблемы, возникающие при использовании других вариантов. Пользователь не может случайно наткнуться на это, и это не требует никакой существующей функциональности в вашем приложении. Он работает как с отладочными, так и с релизными сборками, независимо от того, где и как они распространяются.
Больше всего мне нравится то, что один и тот же сертификат можно использовать на неограниченном количестве устройств и приложений. Это идеально подходит как для независимых разработчиков, так и для компаний, которым нужно единое решение, которое работает для всех их продуктов и команд.
Вы также можете настроить несколько сертификатов, разблокировать различные уровни привилегий или указать даты истечения срока действия для подрядчиков или гостей, которым нужен доступ только в течение установленного периода времени.
Но как именно это работает? Что ж, он опирается на основу безопасности Apple, а точнее на функцию SecTrustEvaluate, которая позволяет нам оценить, доверяем ли мы данному сертификату (профилю, который загружается из двоичного файла приложения). Поскольку сертификат использует пользовательский центр подписи, это значение будет истинным только в том случае, если на устройстве установлен специальный профиль конфигурации, который мы генерируем отдельно и который связан с центром подписи. Только соответствующий профиль приведет к успешному выполнению кода.
В этом Gist мы предоставили пошаговые инструкции о том, как создавать собственные профили и сертификаты с кодом Swift, необходимым для подтверждения доверия. Мы также работаем над инструментом командной строки с открытым исходным кодом, чтобы сделать его доступным для всех, так почему бы не отметить наш репозиторий и не следить за уведомлениями о будущих обновлениях?
Другие варианты
Мы понимаем, что это не исчерпывающий список. В ходе нашего исследования мы выявили множество других решений, в том числе:
- Пароль или PIN-код запрашиваемый при открытии меню отладки
- Разблокировка меню отладки с помощью удаленного push-уведомления
- Проверка определенных метаданных устройства, таких как имя или адрес подключенного WiFi
- Использование общей связки ключей или группы пользовательских настроек по умолчанию, а также другого приложения, установленного на том же устройстве.
Мы будем рады услышать ваши отзывы, возможно, есть решение, которое мы не рассмотрели, или вы узнали здесь что-то новое. В любом случае вы можете связаться с нами через наш Twitter.
Подписывайся на наши соцсети: Telegram / VKontakte
Вступай в открытый чат для iOS-разработчиков: t.me/swiftbook_chat