Народный

Безопасность

Certificate Pinning — привязка к конкретному TLS-сертификату

Техника проверки, при которой клиент сравнивает сертификат сервера не с CA-цепочкой, а с заранее зашитым отпечатком. Защищает от подмены через скомпрометированный CA. Используется в VPN-клиентах.

Определение

Certificate Pinning (SSL/TLS pinning) — техника аутентификации сервера, при которой клиент сравнивает предъявленный сервером TLS-сертификат (или его публичный ключ) с заранее зашитым в код «отпечатком» (fingerprint), а не полагается на стандартную проверку через цепочку Certificate Authority (CA). Защищает от MITM-атак через скомпрометированный или государственный CA, который мог бы выпустить «настоящий» сертификат для подмены.

В VPN-клиентах pinning гарантирует, что клиент общается именно с серверами провайдера, а не с подсунутым ТСПУ-MITM, владеющим легитимным сертификатом от какого-нибудь корневого CA.

Как работает

  1. Build-time: разработчик зашивает в код клиента отпечаток (SHA-256 hash) сертификата или public key сервера. Может быть несколько (primary + backup).
  2. Runtime TLS handshake: клиент получает сертификат от сервера.
  3. Стандартная валидация (цепочка к CA) — необязательно.
  4. Pin-check: клиент вычисляет hash полученного сертификата (или public key) и сравнивает с зашитым.
  5. Mismatch → разрыв соединения + alert. Match → продолжаем.

Pinning может быть:

  • Cert pinning: hash самого сертификата. При ротации сертификата нужно обновлять клиент.
  • Public key pinning: hash только public key. Cert можно ротировать (новый cert с тем же ключом), клиент не падает. Предпочтительный вариант.
  • CA pinning: разрешаем только сертификаты от конкретного CA (например, Let’s Encrypt). Менее строго, но устойчиво к ротации.

Зачем в VPN

Без pinning сценарий атаки:

  1. РКН/ФСБ требует от российского CA выпустить сертификат для vpn-provider.com.
  2. ТСПУ делает MITM: клиент соединяется к vpn-provider.com, попадает на ТСПУ-сервер, тот предъявляет «легитимный» сертификат.
  3. Клиент проходит стандартную CA-валидацию (cert валиден, цепочка норм), думает, что говорит с VPN.
  4. ТСПУ дешифрует, читает, перешифровывает и отправляет дальше.

С pinning это не работает: подсунутый сертификат, даже с правильной цепочкой, не совпадает с зашитым fingerprint → разрыв.

Какие VPN используют

  • Mullvad app: pinning Cloudflare-CA + own root CA.
  • ProtonVPN: pinning отдельно для control-channel и updates.
  • IVPN: pinning + проверка ECH-config publish.
  • NordVPN, ExpressVPN, Surfshark: pinning в mobile-клиентах, в desktop — частично.
  • OpenVPN с tls-auth + tls-crypt: эффективно эквивалентно pinning’у (общий PSK).
  • WireGuard: cryptographic pinning встроен в протокол через PublicKey пира.

HPKP — публичное pinning в браузерах

HTTP Public Key Pinning (RFC 7469) — браузерный аналог. Сайт через заголовок Public-Key-Pins декларирует свои pin-hash; браузер сохраняет на N дней и проверяет. Запущен Google и Mozilla в 2014, deprecated в 2018 — слишком опасен для случайного «закирпичивания» сайта при ошибке pin-config. Сейчас вместо HPKP — Expect-CT и Certificate Transparency.

В VPN-клиентах риск «brick» меньше, потому что разработчик контролирует и клиент, и backend.

Pinning в Android

Android API предоставляет Network Security Configuration (с API 24+) — XML-конфиг с pin-list. Простой деplugin без кода:

<pin-set expiration="2027-01-01">
  <pin digest="SHA-256">abc...</pin>
  <pin digest="SHA-256">def...</pin>
</pin-set>

Многие VPN-клиенты используют этот механизм.

Что pinning НЕ защищает

  • Compromised endpoint: если на клиент-устройстве вирус, никакой pinning не поможет.
  • Updates с pinning ослаблением: если новая версия клиента деплоится с pin-bypass — старый pin неактуален.
  • DNS-MITM до TLS: pinning срабатывает на этапе TLS, до этого DNS можно отравить. Защита — DoH/DoT.
  • Pin via сертификат → utlz user-installed CA: в Android pinning через Network Security Config по умолчанию работает рядом с user-CA — если в системе есть «корпоративный» CA, pinning переопределяет это (хорошо).

Источники

Связанные термины

  • TLS 1.3 — где живёт сертификат.
  • PFS — комплементарное свойство.
  • Kill switch — что делать при разрыве из-за pin-mismatch.
  • No-logs — комплементарная политика провайдера.
  • IP leak — что может произойти, если pinning bypass’нули.