Назад | Перейти на главную страницу

Заголовки закрепления открытого ключа правильная настройка и проверка отказа

Я пытаюсь настроить заголовок Public Key Pinning в nginx 1.7.12 (Public-Key-Pins) но мне кажется что-то не хватает. Я знаю, как создавать соответствующие pin-sha256 поля.

Думал, будет так работать:

  1. Если я включу в заголовок значение pin-sha256 текущего сертификата, то все будет нормально.
  2. Если я не приложу сертификат pin-sha256 (ни каких-либо промежуточных или корневых сертификатов), тогда это должно означать ошибку, и браузер должен:
    • запретить посещение страницы,
    • вывести ошибку по пинам в консоль,
    • и если предусмотрено, нажмите report-uri конечная точка с информацией по запросу

Что на самом деле происходит

В случае с 2. в Firefox просто The site specified an invalid Public-Key-Pins header. предупреждение в консоли, и визит продолжается как обычно (в случае 1 предупреждений нет, поэтому заголовок должен быть правильным). В Chrome нет признаков того, что ни одно из значений sha256 не может быть сопоставлено с текущим сертификатом, посещение работает все время.

(для тестирования использовались Firefox 37 и Chrome 41 в Arch Linux).

Что мне не хватает? Каким должно быть реальное поведение Public-Key-Pins заголовок, и как я могу вызвать ошибку в настройке, чтобы проверить случай сбоя?

Мой текущий заголовок имеет примерно такую ​​форму (короткий максимальный возраст для тестирования, правильно заполненный FQDN:

Public-Key-Pins: pin-sha256="XOwgEECL9p3X2PctwnsIvbV+ySJ975dNYbm8wxkjzXg="; pin-sha256="NxVoMtbt/y2GI3lV/ROFIcDyz8kj/W8JTtoszmBezOg="; pin-sha256="aM2laE5XUTDaWo6RnfKZ9OZHrNz/KQmRxCRO6YmWHGE="; max-age=900; report-uri="https://<FQDN>/hpkp";

Чтобы ваш PIN-код был принят, он должен:

  1. Содержит хотя бы один ключ из текущей цепочки сертификатов
  2. Содержит как минимум один ключ, НЕ входящий в текущую цепочку сертификатов («Резервный ключ»). Думаю, в вашем случае этого не было.

Чтобы проверить это:

  • используйте версию разработчика firefox, перейдите на вкладку сети, выберите запрос, выберите вкладку безопасности справа. В статусе должно быть указано «Прикрепление открытого ключа».
  • если вы действительно хотите вызвать ошибку, используйте опцию «включить субдомены» и подпишите любой субдомен новым ключом. Firefox должен отказаться от подключения.

Некоторые документы: https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning

Чтобы быть более конкретным: «Если я не включаю pin-sha256 сертификата (ни какой-либо промежуточный или корневой сертификат)», тогда браузер не сохраняйте булавку. Браузер отображается при ошибке подключения только тогда, когда уже сохраненный список контактов не соответствует текущей цепочке сертификатов.

https://scotthelme.co.uk/hpkp-toolset и https://report-uri.io/home/pkp_analyse может помочь