Закрепление сертификата (Certificate Pinning)
Что такое Закрепление сертификата (Certificate Pinning)?
Закрепление сертификата (Certificate Pinning)Метод, при котором приложение жёстко прописывает ожидаемый сертификат или открытый ключ и отклоняет TLS-соединения, не соответствующие им, тем самым противодействуя мошенническим или скомпрометированным УЦ.
Закрепление сертификата связывает конкретный TLS-сервер с одной или несколькими криптографическими идентичностями — полным конечным (leaf) сертификатом, промежуточным сертификатом или хешем SubjectPublicKeyInfo (SPKI), — которым клиент доверяет неявно. В ходе рукопожатия клиент сравнивает цепочку сервера с закреплёнными значениями и прерывает соединение при несовпадении, даже если цепочка подписана публично доверенным УЦ. Это противодействует злоумышленнику, обладающему поддельным, но действительным сертификатом, например выданным скомпрометированным или принуждённым УЦ (инциденты с DigiNotar и Comodo в 2011 году, приведшие к появлению мошеннических сертификатов Google, — классический мотив этого).
Браузерный HPKP против закрепления в приложениях
Веб пытался внедрить закрепление через HTTP Public Key Pinning (HPKP, RFC 7469, 2015) — заголовок ответа Public-Key-Pins. На практике он провалился: утерянный ключ, штатная ротация без обновления закреплений или враждебная инъекция «RansomPKP» могли заблокировать доступ пользователям на весь период max-age. Chrome объявил HPKP устаревшим в 2017 году и удалил его в Chrome 72 (2018), передав эту роль журналам Certificate Transparency. Закрепление сохраняется в основном в мобильных приложениях, взаимодействующих с фиксированным бэкендом (Android Network Security Config, iOS NSPinnedDomains, OkHttp CertificatePinner).
flowchart TD
A[Client opens TLS to api.example.com] --> B[Server presents certificate chain]
B --> C{Chain validates against system CAs?}
C -->|No| E[Abort: standard TLS failure]
C -->|Yes| D{SPKI hash matches a pinned key?}
D -->|Yes| F[Connection allowed]
D -->|No| G[Abort: pin mismatch, block MITM/rogue CA]Слабые места и меры защиты
Закрепление надёжно ровно настолько, насколько надёжны его резервные закрепления, — всегда закрепляйте ключ ротации. На устройствах с root-доступом или джейлбрейком такие инструменты, как Frida и objection, перехватывают процедуру проверки, чтобы снять закрепления, поэтому закрепление повышает планку для MITM-перехвата, но не заменяет аттестацию устройства. Современные рекомендации (OWASP MASVS) отдают предпочтение закреплению SPKI с короткоживущими сертификатами и протестированным планом ротации.
● Примеры
- 01
Банковское приложение, которое закрепляет SHA-256 хеш открытого ключа своего сервера и отклоняет любой другой сертификат.
- 02
Мобильный API-клиент, который закрепляет как рабочий (production), так и резервный ключ ротации.
● Частые вопросы
Что такое Закрепление сертификата (Certificate Pinning)?
Метод, при котором приложение жёстко прописывает ожидаемый сертификат или открытый ключ и отклоняет TLS-соединения, не соответствующие им, тем самым противодействуя мошенническим или скомпрометированным УЦ. Относится к категории Сетевая безопасность в кибербезопасности.
Что означает Закрепление сертификата (Certificate Pinning)?
Метод, при котором приложение жёстко прописывает ожидаемый сертификат или открытый ключ и отклоняет TLS-соединения, не соответствующие им, тем самым противодействуя мошенническим или скомпрометированным УЦ.
Как защититься от Закрепление сертификата (Certificate Pinning)?
Защита от Закрепление сертификата (Certificate Pinning) обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Закрепление сертификата (Certificate Pinning)?
Распространённые альтернативные названия: TLS pinning, Public-key pinning.