SSL-сертификат Charles на Android: установка и нюансы версий
Зачем ставить SSL-сертификат на Android
В прошлом уроке вы подключили Android к Charles через Wi‑Fi прокси и убедились, что HTTP-трафик виден.
Но большинство приложений работают по HTTPS (всё шифруется). Без сертификата Charles вы обычно увидите только записи вида CONNECT api.site.com:443, но не увидите:
какой именно эндпоинт вызвали
какие параметры и заголовки отправили
какое тело ответа вернул серверУстановка сертификата на Android делает так, чтобы телефон доверял Charles при расшифровке HTTPS.
> Важно: даже с сертификатом часть приложений может не расшифровываться из-за ограничений Android (начиная с Android 7) или из-за certificate pinning. Ниже разберём, как это распознать.
!Схема, показывающая разницу между HTTPS без сертификата и с установленным сертификатом на Android
Что должно быть готово перед началом
Charles запущен на Windows.
Android уже подключён к Charles через Wi‑Fi прокси (как в предыдущем уроке).
Вы видите, что HTTP-запросы с телефона приходят в Charles (например, через NeverSSL).
В Charles включён Proxy.Скачивание сертификата Charles на Android
Зачем нужен этот шаг
Сертификат нужно получить на самом телефоне. Самый простой способ: открыть специальную страницу, которую Charles отдаёт через прокси.
Пошаговая инструкция
Убедитесь, что на Android включён Wi‑Fi прокси на ваш ПК с Charles (IP и порт, обычно 8888).
Откройте браузер на Android.
Перейдите по адресу chls.pro/ssl.
Нажмите на установку сертификата (страница обычно предлагает загрузить сертификат Charles).
Дождитесь, пока файл сертификата будет скачан или сразу откроется установщик.Возможные ошибки и как их исправить
Страница chls.pro/ssl не открывается
1. Проверьте, что телефон всё ещё использует прокси (иногда сеть переподключилась и настройки не применились).
2. Проверьте, что Charles запущен.
3. Проверьте, что телефон и ПК в одной сети.
4. Проверьте Windows Firewall (иногда он блокирует входящие подключения к Charles).
Открывается обычный сайт вместо страницы Charles
1. Почти всегда это значит, что прокси на телефоне не применился.
2. Перепроверьте настройки именно текущей Wi‑Fi сети: прокси должен быть
Вручную и с IP ПК.
Чек-лист: что должно получиться
На телефоне открывается страница установки сертификата Charles.
Сертификат скачался или запустился экран установки сертификата.Установка сертификата на Android
Зачем нужен этот шаг
Скачанный сертификат нужно добавить в доверенные на Android, чтобы при HTTPS-соединении телефон не считал подмену сертификата «атакой».
Пошаговая инструкция
После скачивания сертификата Android обычно сам предложит его установить.
Если не предложил, откройте файл сертификата из загрузок (например, через приложение “Файлы”).
Введите имя сертификата, например Charles.
Если Android спросит назначение сертификата, выберите вариант типа CA certificate или Сертификат ЦС.
Подтвердите установку.> Часто Android требует, чтобы на устройстве был настроен блокировщик экрана (PIN/пароль). Это нормальная защита: без неё сертификаты ставить нельзя.
Возможные ошибки и как их исправить
Android пишет, что нужен PIN/пароль
1. Установите блокировку экрана (PIN/пароль).
2. Повторите установку сертификата.
Сертификат устанавливается, но потом вы его “не находите”
1. Откройте настройки Android и найдите раздел сертификатов.
2. Обычно путь похож на
Настройки →
Безопасность →
Шифрование и учетные данные →
Доверенные учетные данные или
Пользовательские сертификаты.
Установщик говорит, что формат сертификата не поддерживается
1. Скачайте сертификат заново через
chls.pro/ssl.
2. Не переименовывайте файл вручную.
3. Убедитесь, что скачиваете именно сертификат Charles, а не HTML-страницу.
Чек-лист: что должно получиться
Сертификат установлен как пользовательский CA (в списке пользовательских сертификатов).
Телефон после установки не показывает ошибку установки.Включаем расшифровку HTTPS для доменов приложения в Charles
Зачем нужен этот шаг
Сертификат на Android сам по себе не заставляет Charles расшифровывать HTTPS. В Charles должно быть включено SSL Proxying для нужных доменов.
Если SSL Proxying не настроен, вы продолжите видеть CONNECT без содержимого.
Пошаговая инструкция
На ПК откройте Charles.
Откройте Proxy → SSL Proxying Settings....
Убедитесь, что включено Enable SSL Proxying.
Добавьте правило для домена вашего приложения (лучше точечно):
1.
Host: домен API, например
api.test-company.com
2.
Port:
443
Нажмите OK.> Для быстрой диагностики можно временно поставить Host: * и Port: 443, но для реальной работы лучше так не оставлять.
Возможные ошибки и как их исправить
Сертификат стоит, но в Charles всё равно только CONNECT
1. Проверьте, включён ли
Enable SSL Proxying.
2. Проверьте, подходит ли правило под нужный домен.
Чек-лист: что должно получиться
SSL Proxying включён.
Для нужного домена добавлено правило на 443.Проверка: что HTTPS с Android читается
Зачем нужен этот шаг
Нужно убедиться, что вы видите реальные GET/POST и вкладки Request/Response, а не только туннели.
Пошаговая инструкция
В Charles очистите сессию.
На Android откройте браузер и перейдите на страницу httpbin GET.
На ПК в Charles найдите запросы к httpbin.org.
Откройте запрос и проверьте:
1. Во вкладке
Request видны метод, URL, заголовки.
2. Во вкладке
Response видно тело ответа (обычно JSON).
Возможные ошибки и как их исправить
В браузере на телефоне предупреждение о недоверенном сертификате
1. Значит сертификат не установился или установлен не как CA.
2. Удалите сертификат и поставьте заново через
chls.pro/ssl.
В Charles опять только CONNECT httpbin.org:443
1. Проверьте SSL Proxying Settings и правило для
httpbin.org (или временно
* : 443).
Чек-лист: что должно получиться
Для HTTPS-запросов в Charles видны реальные пути типа GET /get.
В Response видно содержимое ответа.Нюансы разных версий Android: почему “сертификат стоит, но приложение не расшифровывается”
Главная идея простыми словами
Начиная с Android 7 (Nougat) многие приложения по умолчанию не доверяют пользовательским CA-сертификатам (тем, что вы поставили вручную). Это сделано специально, чтобы защитить пользователей от перехвата трафика вредоносными прокси.
Из-за этого возможна ситуация:
браузер на телефоне нормально читается в Charles
а мобильное приложение не работает через прокси или не расшифровываетсяТаблица: что ожидать по версиям Android
| Версия Android | Что обычно происходит с сертификатом Charles | Что это значит для QA |
|---|---|---|
| Android 6 и ниже | Многие приложения доверяют пользовательскому CA | Часто приложение расшифровывается “из коробки” |
| Android 7–13 | По умолчанию приложения не доверяют пользовательскому CA | Браузер часто читается, а приложения могут давать SSL-ошибки |
| Android 14+ | Та же логика, плюс иногда больше ограничений и предупреждений в UI | Чаще нужны подходы через debug-сборку/эмулятор/рут |
Официальная справка про доверие сертификатам и настройки доверия в приложении: Network security configuration
Как понять, что вы упёрлись именно в ограничение Android 7+
В Charles вы можете увидеть ошибки в сессии, а на телефоне приложение может:
не загружать данные
показывать “No internet”, “Network error”
падать на экране логинаТипичные признаки в Charles:
SSL Handshake failed
соединение обрывается сразу после CONNECTЧто можно сделать QA в реальной работе
Попросить debug-сборку приложения, где разработчики разрешили доверять пользовательским сертификатам
1. Обычно это делается настройкой доверия в
network_security_config для debug.
2. Это самый правильный путь в команде.
Использовать эмулятор или тестовое устройство с возможностью установить сертификат как системный
1. Часто требует root-доступа и не всегда разрешено политиками компании.
Если приложение использует certificate pinning
1. Даже системный сертификат может не помочь.
2. Это отдельная защита, и её обычно обходят только специальными методами (зависит от проекта и правил компании).
> Для QA важно не “ломать защиту любой ценой”, а понимать причину: это ограничение ОС или защита приложения. Дальше вы идёте к команде и договариваетесь о тестовом подходе.
Типичные проблемы и быстрые решения
Проблема: на телефоне пропал интернет после установки сертификата
Чаще всего причина не в сертификате, а в прокси.
Проверьте, что Charles запущен.
Проверьте, что телефон всё ещё в той же Wi‑Fi сети.
Проверьте, что в настройках Wi‑Fi прокси указан правильный IP и порт.Проблема: браузер читается, а приложение нет
Проверьте, что в Charles включён SSL Proxying именно для домена приложения.
Если SSL Proxying включён, а приложение всё равно падает с SSL-ошибкой, вероятны причины:
1. Android 7+ не доверяет пользовательскому CA для этого приложения.
2. В приложении включён certificate pinning.
Зафиксируйте симптомы (скрин, текст ошибки, лог из Charles) и обсудите с командой вариант debug-сборки.Проблема: слишком много доменов и мусора в сессии
Используйте фильтр в Charles по домену API.
Не держите правило * : 443 постоянно, замените на конкретные хосты.Чек-лист: итог по Android (что должно быть настроено)
Android подключён к Charles через Wi‑Fi прокси.
Сертификат Charles установлен на Android как CA.
В Charles включён SSL Proxying и добавлены домены, которые нужно расшифровывать.
В Charles видны HTTPS-запросы Android в виде реальных GET/POST, а не только CONNECT.
Если приложение не расшифровывается, вы понимаете две основные причины: ограничения Android 7+ для пользовательских CA и certificate pinning.Мини-резюме
Чтобы читать HTTPS-трафик Android в Charles, нужно скачать и установить сертификат Charles на телефон (через chls.pro/ssl) и включить SSL Proxying для нужных доменов на ПК. Если после этого браузер читается, а приложение нет, чаще всего причина в том, что Android 7+ не доверяет пользовательским CA по умолчанию или приложение использует certificate pinning. Для рабочих проектов обычно решают это через debug-сборку, эмулятор или согласованный с командой тестовый подход.