Certificate pinning

Простыми словами

Приложение принимает не любой подходящий сертификат доверенного центра, а только заранее согласованный вариант. Но после замены ключа старое приложение может перестать подключаться — даже если новый сертификат полностью корректен.

Как применяется

Pinning рассматривают лишь при обоснованной модели угроз и контроле над клиентом, сервером и обновлением набора pins. Это не универсальная рекомендация для каждого приложения. Нужны резервный вариант, безопасная доставка обновления и план замены ключей без отказа обслуживания.

Пример применения

Управляемое мобильное приложение закрепляет открытый ключ своего API. До плановой замены серверного ключа команда доставляет обновлённый набор разрешённых значений и испытывает старые версии клиентов. Автоматический обход проверки при ошибке не вводят: он разрушил бы ожидаемую защиту.

Не путать с

  • Проверка цепочки TLSПодтверждает доверие к сертификату по правилам PKI; pinning вводит дополнительное ограничение.
  • Самоподписанный сертификатСпособ подписания сертификата, а не механизм закрепления доверенного значения в клиенте.
  • Хеш сертификатаМожет быть значением pin, но вычисление хеша без безопасной политики доверия ничего не закрепляет.

Как это работает

  1. Обосновать необходимостьСопоставляют дополнительную защиту с рисками простоя и управляемостью клиентов.
  2. Выбрать закрепляемое значениеОпределяют сертификат или ключ, область доверия и резервный pin.
  3. Выполнить сравнениеКлиент проверяет TLS и сопоставляет предъявленное значение с разрешённым набором.
  4. Управлять заменойОбновляют pins заранее и тестируют переход при смене ключей и сертификатов.

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

Частые вопросы

Pinning нужен всем сайтам?

Нет. Его эксплуатационные риски часто превышают пользу; нужна отдельная оценка.

Это защита от любой атаки на клиент?

Нет. Компрометация самого приложения или устройства может обходить его проверки.

Можно при ошибке принимать любой сертификат?

Нет. Это превращает отказ проверки в обход ограничения доверия.

Certificate pinning — дополнительное ограничение доверия TLS-клиента заданным сертификатом или открытым ключом, иногда представленным его хешем. При соединении клиент сравнивает полученное значение с разрешённым набором. Pinning не должен подменять необходимые проверки сертификата и имени узла.