Безопасность
Certificate Pinning — привязка к конкретному TLS-сертификату
Техника проверки, при которой клиент сравнивает сертификат сервера не с CA-цепочкой, а с заранее зашитым отпечатком. Защищает от подмены через скомпрометированный CA. Используется в VPN-клиентах.
Определение
Certificate Pinning (SSL/TLS pinning) — техника аутентификации сервера, при которой клиент сравнивает предъявленный сервером TLS-сертификат (или его публичный ключ) с заранее зашитым в код «отпечатком» (fingerprint), а не полагается на стандартную проверку через цепочку Certificate Authority (CA). Защищает от MITM-атак через скомпрометированный или государственный CA, который мог бы выпустить «настоящий» сертификат для подмены.
В VPN-клиентах pinning гарантирует, что клиент общается именно с серверами провайдера, а не с подсунутым ТСПУ-MITM, владеющим легитимным сертификатом от какого-нибудь корневого CA.
Как работает
- Build-time: разработчик зашивает в код клиента отпечаток (SHA-256 hash) сертификата или public key сервера. Может быть несколько (primary + backup).
- Runtime TLS handshake: клиент получает сертификат от сервера.
- Стандартная валидация (цепочка к CA) — необязательно.
- Pin-check: клиент вычисляет hash полученного сертификата (или public key) и сравнивает с зашитым.
- Mismatch → разрыв соединения + alert. Match → продолжаем.
Pinning может быть:
- Cert pinning: hash самого сертификата. При ротации сертификата нужно обновлять клиент.
- Public key pinning: hash только public key. Cert можно ротировать (новый cert с тем же ключом), клиент не падает. Предпочтительный вариант.
- CA pinning: разрешаем только сертификаты от конкретного CA (например, Let’s Encrypt). Менее строго, но устойчиво к ротации.
Зачем в VPN
Без pinning сценарий атаки:
- РКН/ФСБ требует от российского CA выпустить сертификат для
vpn-provider.com. - ТСПУ делает MITM: клиент соединяется к
vpn-provider.com, попадает на ТСПУ-сервер, тот предъявляет «легитимный» сертификат. - Клиент проходит стандартную CA-валидацию (cert валиден, цепочка норм), думает, что говорит с VPN.
- ТСПУ дешифрует, читает, перешифровывает и отправляет дальше.
С 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’нули.