> Что такое SSL pinning, зачем он нужен и как работает? (iOS, Swift, Android)
Уровень: junior · Роль: mobile · Категория: Технические вопросы
Компании: Иннотех
Стек: iOS, Swift, Android
> Пример ответа
SSL pinning (привязка SSL-сертификата) - это механизм защиты от атак типа "человек посередине" (MITM) на мобильных устройствах. В отличие от стандартной проверки цепочки сертификатов, которая доверяет любому сертификату, подписанному доверенным центром (CA), SSL pinning жёстко привязывает приложение к конкретному сертификату или публичному ключу сервера.
Зачем нужен:
На мобильных платформах (iOS, Android) злоумышленник может установить свой корневой сертификат на устройство (например, через перехват трафика в корпоративной сети или вредоносное ПО). Без pinning приложение спокойно примет поддельный сертификат, и трафик будет расшифрован. Pinning предотвращает это, проверяя, что сертификат сервера совпадает с заранее известным "отпечатком" (hash) или самим сертификатом, вшитым в код приложения.
Как работает:
-
Разработчик получает сертификат сервера (или его публичный ключ) и вычисляет его хеш (например, SHA-256).
-
Этот хеш вшивается в бинарник приложения (или загружается через безопасный канал при первом запуске).
-
При каждом HTTPS-соединении приложение проверяет, что сертификат сервера соответствует сохранённому хешу.
-
Если хеш не совпадает - соединение разрывается, даже если цепочка CA валидна.
Примеры реализации:
-
iOS (Swift): Используется
URLSessionс делегатомURLSessionDelegate, где вdidReceive challengeпроверяетсяSecTrustEvaluateWithErrorи сравнивается отпечаток сертификата. -
Android (Kotlin/Java): Через
TrustManagerвHttpsURLConnectionилиOkHttpс кастомнымCertificatePinner(например,OkHttpClient.Builder().certificatePinner(...)).
Важно:
-
Pinning требует обновления приложения при смене сертификата сервера (иначе приложение сломается).
-
Рекомендуется пинить публичный ключ, а не весь сертификат - это упрощает ротацию.
-
Для надёжности можно хранить несколько запасных ключей (backup pins).
> Похожие задачи по mobile
В чем разница между open и public в Swift
Что объединяет структуры данных Dictionary и Set в Swift
Что происходит в методах viewDidLoad и viewWillAppear при добавлении view в иерархию
В чем разница между git rebase и merge
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью