Закрепление открытого ключа HTTP
HTTP |
---|
![]() |
Методы запроса |
Поля заголовка |
Коды статуса ответа |
Методы безопасного контроля доступа |
Уязвимости безопасности |
Закрепление открытого ключа HTTP ( HPKP ) — это устаревший механизм интернет-безопасности , предоставляемый через HTTP- заголовок , который позволяет веб-сайтам HTTPS противостоять выдаче себя за другое лицо злоумышленниками, использующими неправильно выданные или иным образом поддельные цифровые сертификаты . [1] Сервер использует его для доставки клиенту ( например, веб-браузеру ) набора хешей открытых ключей , которые должны появиться в цепочке сертификатов будущих подключений к тому же доменному имени .
Например, злоумышленники могут скомпрометировать центр сертификации , а затем неправильно выдать сертификаты для веб-источника . Чтобы бороться с этим риском, веб-сервер HTTPS предоставляет список «закрепленных» хешей открытых ключей, действительных в течение определенного времени; при последующих соединениях в течение этого срока действия клиенты ожидают, что сервер будет использовать один или несколько из этих открытых ключей в своей цепочке сертификатов. Если этого не происходит, отображается сообщение об ошибке, которое пользователь не может (легко) обойти.
Этот метод закрепляет не сертификаты, а хэши открытых ключей . Это означает, что можно использовать пару ключей для получения сертификата от любого центра сертификации, если у вас есть доступ к закрытому ключу. Также пользователь может закрепить открытые ключи корневых или промежуточных сертификатов (созданных центрами сертификации), ограничив сайт сертификатами, выданными указанным центром сертификации.
Из-за сложности механизма HPKP и возможности случайного неправильного использования (что потенциально может привести к блокировке со стороны системных администраторов) в 2017 году браузеры прекратили поддержку HPKP, а в 2018 году удалили его поддержку в пользу прозрачности сертификатов . [2] [3]
Механизм
[ редактировать ]Сервер передает политику HPKP пользовательскому агенту через HTTP с именем поле заголовка ответа Public-Key-Pins
(или Public-Key-Pins-Report-Only
только для целей отчетности).
Политика HPKP определяет хэши информации об открытом ключе субъекта одного из сертификатов в аутентичной цепочке сертификатов открытого ключа X.509 веб-сайта (и по крайней мере одного резервного ключа) в pin-sha256
директивы и период времени, в течение которого пользовательский агент должен обеспечить закрепление открытого ключа в max-age
директива, необязательно includeSubDomains
директива для включения всех поддоменов (домена, отправившего заголовок) в политику закрепления и необязательно report-uri
директива с URL-адресом, куда отправлять отчеты о нарушении закрепления. По крайней мере, один из открытых ключей сертификатов в цепочке сертификатов должен совпадать с закрепленным открытым ключом, чтобы пользовательский агент считал цепочку действительной.
На момент публикации, RFC 7469 разрешает использовать только алгоритм хеширования SHA-256 . ( В Приложении A к RFC 7469 упоминаются некоторые инструменты и необходимые аргументы, которые можно использовать для создания хэшей для политик HPKP.)
Оператор веб-сайта может либо закрепить открытый ключ корневого сертификата определенного корневого центра сертификации, позволяя только этому центру сертификации (и всем промежуточным центрам сертификации, подписанным его ключом) выдавать действительные сертификаты для домена веб-сайта, и/или закрепить ключ(и) одного или нескольких промежуточных сертификатов выдачи или для закрепления открытого ключа конечного объекта.
Должен быть закреплен хотя бы один резервный ключ на случай, если текущий закрепленный ключ потребуется заменить. HPKP недействителен без этого резервного ключа (резервный ключ определяется как открытый ключ, отсутствующий в текущей цепочке сертификатов). [4]
HPKP стандартизирован в RFC 7469. [1] Он расширяет возможности статического закрепления сертификатов , при котором жестко кодируются хэши открытых ключей известных веб-сайтов или служб в веб-браузерах и приложениях. [5]
Большинство браузеров отключают закрепление цепочек сертификатов с частными корневыми сертификатами, чтобы включить различные проверки корпоративного контента. сканеры [6] и инструменты веб-отладки (такие как mitmproxy или Fiddler ). Стандарт RFC 7469 рекомендует отключать отчеты о нарушении закрепления для «пользовательских» корневых сертификатов, где для браузера «приемлемо» отключение проверки закрепления. [7]
Отчетность
[ редактировать ]Если пользовательский агент выполняет проверку PIN-кода и не может найти действительный отпечаток SPKI в обслуживаемой цепочке сертификатов, он отправит POST отчет о нарушении в формате JSON на хост, указанный в директиве report-uri, содержащий подробную информацию о нарушении. Этот URI может обслуживаться через HTTP или HTTPS ; однако пользовательский агент не может отправлять отчеты о нарушении HPKP на URI HTTPS в том же домене, что и домен, для которого он сообщает о нарушении. Хосты могут использовать HTTP для report-uri
, используйте альтернативный домен или службу отчетов. [8]
Некоторые браузеры также поддерживают Public-Key-Pins-Report-Only
, который только запускает этот отчет, не показывая пользователю ошибку.
Критика и упадок
[ редактировать ]Сообщается, что во время пикового внедрения HPKP использовался 3500 из 1 миллиона крупнейших интернет-сайтов, и к концу 2019 года эта цифра снизилась до 650. [9]
Критика и беспокойство вращались вокруг сценариев злонамеренных действий или человеческих ошибок, известных как HPKP Suicide и RansomPKP. [10] В таких сценариях возможность владельца веб-сайта публиковать новое содержимое в своем домене будет серьезно затруднена либо из-за потери доступа к своим собственным ключам, либо из-за объявления новых ключей злоумышленником.
Поддержка браузера и прекращение поддержки
[ редактировать ]Браузер | Версия добавлена | Версия устарела | Версия удалена | Примечания |
---|---|---|---|---|
Гугл Хром | 46 [11] | 67 [12] | 72 [13] [14] | |
Опера | 33 [15] | 54 [16] | 60 | |
Firefox | 35 | 72 [17] [18] | — | Можно включить, установив флаг security.cert_pinning.hpkp.enabled к true . [19]
|
Интернет Эксплорер | — [20] | — | — | |
Microsoft Край | — [20] | — | — | |
Сафари | — | — | — |
См. также
[ редактировать ]- Компрометация центра сертификации
- Прозрачность сертификата
- Строгая транспортная безопасность HTTP
- Список полей заголовка HTTP
- Авторизация центра сертификации DNS
- Расширение закрепления открытого ключа для HTTP (HPKP) в веб-документах MDN
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Эванс, Крис; Палмер, Крис; Сливи, Райан (апрель 2015 г.). Расширение закрепления открытого ключа для HTTP . IETF . дои : 10.17487/RFC7469 . ISSN 2070-1721 . РФК 7469 .
- ^ Лейден, Джон (30 октября 2017 г.). «RIP HPKP: Google отказывается от закрепления открытого ключа» . Регистр . Проверено 18 декабря 2018 г.
- ^ Тунг, Лиам (30 октября 2017 г.). «Google: Chrome отказывается от закрепления открытого ключа, и вот почему» . ЗДНет . Проверено 18 декабря 2018 г.
- ^ «О закреплении открытого ключа» . Noncombatant.org . Проверено 7 мая 2015 г.
- ^ «Закрепление сертификата и открытого ключа — OWASP» . www.owasp.org . Проверено 7 мая 2015 г.
- ^ «Часто задаваемые вопросы по безопасности — Проекты Chromium» . www.chromium.org . Проверено 7 июля 2015 г.
- ^ Эванс, К.; Палмер, К.; Сливи, Р. (2015). «RFC 7469 — Расширение закрепления открытого ключа для HTTP» . www.tools.ietf.org . дои : 10.17487/RFC7469 . Проверено 7 июля 2015 г.
- ^ «Отчет о нарушениях HPKP» . Скотт Хельм.
- ^ «ХПКП больше нет» . Скотт Хельм. 20 января 2020 г. Проверено 30 января 2020 г.
- ^ «Использование функций безопасности для совершения плохих поступков» . Скотт Хельм. 15 августа 2016 г. Проверено 30 января 2020 г.
- ^ Старк, Эмили (31 августа 2015 г.). «Внедрение закрепления открытого ключа с помощью отчетов HPKP» . Разработчики Chrome . Архивировано из оригинала 16 января 2023 г. Проверено 10 марта 2023 г.
- ^ Медли, Джо (07.06.2018). «Устаревшие и удаленные версии Chrome 67» . Разработчики Google . Архивировано из оригинала 10 марта 2023 г. Проверено 10 марта 2023 г.
- ^ Палмер; Эстарк; Рслееви (13 сентября 2022 г.). «Удаление закрепления открытого ключа на основе HTTP — статус платформы Chrome» . www.chromestatus.com . Архивировано из оригинала 25 мая 2022 г. Проверено 18 ноября 2019 г.
- ^ Медли, Джо (27 июня 2020 г.). «Устаревшие версии и удаления в Chrome 72 – Разработчики Chrome» . Разработчики Chrome . Архивировано из оригинала 18 ноября 2022 г. Проверено 10 марта 2023 г.
- ^ Байненс, Матиас (27 октября 2015 г.). «Вышла Опера 33» . Гитхаб . Опера. Архивировано из оригинала 10 марта 2023 г. Проверено 10 марта 2023 г.
- ^ «Что нового в Chromium 67 и Opera 54» . Гитхаб . Опера. 28 июня 2018 г. Архивировано из оригинала 10 марта 2023 г. Проверено 10 марта 2023 г.
- ^ «Закрепление открытого ключа HTTP больше не поддерживается» . Совместимость сайтов Firefox . 14 ноября 2019 г. Архивировано из оригинала 29 мая 2020 г. Проверено 19 февраля 2020 г.
- ^ Килер, Дана (13 ноября 2019 г.). «Изменение исходного кода Mozilla, в результате которого был удален HPKP, включая обсуждение и причины этого изменения (ошибка 1412438)» . Контроль версий Mozilla Firefox . Архивировано из оригинала 10 марта 2023 г. Проверено 10 марта 2023 г.
- ^ «mozilla-central: набор изменений 501812:d791bfa31f08ec478b2ef6ca4f89b3a8849d723b» . hg.mozilla.org . Проверено 18 ноября 2019 г.
- ^ Перейти обратно: а б «Статус расширения закрепления открытого ключа для HTTP в Microsoft Edge находится на рассмотрении» . Разработка Microsoft Edge . Архивировано из оригинала 20 декабря 2016 г. Проверено 21 сентября 2018 г.