Сертификат и MITM
Когда модулю нужен локальный сертификат, как он создаётся и устанавливается, что расшифровывается и что нет, и как его удалить.
Чтобы менять HTTPS-запросы, модуль должен их прочитать. Letakof делает это внутри VPN-туннеля и только для хостов из mitmHosts модуля: каждому хосту он предъявляет сертификат, выпущенный локальным центром сертификации (CA), который существует только на вашем iPhone. Это техника «человек посередине» (MITM), и она работает, только если вы установите этот CA и доверяете ему.
Сертификат не нужен для блокировки доменов (domainRules, domainSets) и для правил на обычном HTTP (порт 80). Он нужен только для HTTPS на порту 443. Установка сертификата сама по себе ничего не блокирует, а модуль без хостов ничего не расшифровывает.
Как создаётся сертификат
- Его создаёт расширение VPN по команде приложения, поэтому сначала подключитесь.
- Это корневой CA, уникальный для вашей установки: ECDSA P-256, действует один год, называется Letakof Local CA с коротким суффиксом. Сертификаты для отдельных хостов выпускаются на лету, на 24 часа.
- Приватный ключ хранится в связке ключей iOS (Keychain), доступен только приложению и расширению, после первой разблокировки, только на этом устройстве и без синхронизации iCloud. Он никогда не записывается в файлы и журнал. Открытый сертификат хранится файлом в общем каталоге приложения.
Настройка
Откройте Настройки → Модули → Сертификат модулей. В заголовке показано состояние: Сертификат не создан, Создан, доверие не подтверждено или Создан, установлен и доверен, с отпечатком SHA-256 и сроком действия.
- Создать сертификат (VPN должен быть включён).
- Установить профиль в Safari. Letakof выдаёт профиль конфигурации (Letakof Local CA, только открытый сертификат, его можно удалить) с одноразового адреса на вашем же устройстве и открывает его в Safari. Разрешите загрузку и установите профиль в Настройки → Основные → VPN и управление устройством.
- Включите полное доверие в Настройки → Основные → Об устройстве → Доверие сертификатов → Letakof Local CA.
- Проверить доверие (VPN должен быть включён). Letakof обращается через расширение VPN к служебному имени и сверяет отпечаток. Если сертификат не доверен, приложение предложит установить профиль и включить полное доверие.
Системные окна в шагах 2 и 3 принадлежат iOS и в вашей версии могут выглядеть иначе.
Что расшифровывается
Только TCP-соединения на портах 443 и 80 к хостам из mitmHosts включённых модулей, кроме excludedHosts и хостов, которые вы исключили сами. Всё остальное остаётся в исходном шифровании.
Имя хоста должно быть известно: из соединения или его SNI. Если оно неизвестно (например, подмена DNS), соединение не расшифровывается, а модуль показывает Имя узла недоступно.
Что перехватить нельзя:
- Приложения с certificate pinning отклоняют подменный сертификат. Обойти это нельзя.
- QUIC и другой UDP. UDP на порт 443 хоста модуля отклоняется локально, чтобы приложение перешло на TCP.
- WebSocket и
Upgradeпроходят без изменений, как и видео, аудио, потоки событий и gRPC.
Соединение с настоящим сервером идёт по обычному маршруту профиля и проверяется полностью; цепочка, опирающаяся на локальный CA, отвергается. Установленный CA не обходит защиту серверов и не даёт доступа к вашим аккаунтам.
Если приложение отказалось от подменного сертификата, модуль показывает TLS несовместим. Диагностика хостов перечисляет хосты, а Не расшифровывать исключает хост для следующих соединений.
Как отключить и удалить
- Выключите модуль или все модули — расшифровка прекратится. Один сертификат ничего не расшифровывает.
- Удалить сертификат убирает ключ из Keychain. Затем удалите профиль сами в Настройки → Основные → VPN и управление устройством. После переустановки приложения экран покажет Не создан, а старый профиль тоже нужно удалить вручную.
Прочитайте перед включением модуля
Сертификат нужен только чтобы читать и менять HTTPS-запросы тех хостов, которые вы разрешили модулями. Ключ создаётся на устройстве и не покидает iPhone. Скрипт модуля видит заголовки, cookie и тела этих запросов. Устанавливайте только модули, код которых вы прочитали: адрес источника, имя автора и SHA-256 не доказывают авторство.
Нашли ошибку? Создайте обращение на GitHub.