Как заставить это работать закрепление сертификата (HPKP) и самозаверяющий сертификат в локальной сети?
Мне нужно использовать SSL в локальной сети, и я хочу избежать ошибки неверного сертификата браузера.
Моя идея состоит в том, чтобы создать самозаверяющий сертификат и затем использовать закрепление сертификата (HPKP), чтобы сообщить браузеру только этот сертификат, которому можно доверять?
В настоящее время я изучаю все варианты, связанные с этой идеей. Я проверил самозаверяющий сертификат и заголовок HPKP (Public-Key-Pins) со значением, например:
"pin-sha256="somedataencodedbase64=";pin-max-age=10;includeSubDomains"
Браузер не принимает его как безопасный. Мне все еще нужно закончить этот тест (с другим самозаверяющим сертификатом, и я должен убедиться, что SPKI рассчитан правильно...
Теперь вопросы:
Является ли самозаверяющий сертификат выданным для данного локального имени хоста (например, mylocalserver) и закрепленным в ответе сервера, даже действительным? Будет ли это даже работать?
Работает ли закрепление сертификата для локальных имен хостов (это означает, что оно работает только с именами доменов)?
Должен ли закрепленный сертификат сначала быть действительным или доверенным ЦС (это означает, что самозаверяющие сертификаты нельзя закрепить - если они не добавлены в хранилище доверенных сертификатов на клиенте)?
Какой самый простой способ получить действительный SSL локально, чтобы мне не нужно было настраивать клиент (клиент Trust Store)?
Можем ли мы увидеть закрепление сертификата как альтернативу доверенному центру сертификации? Я где-то читал, что это просто дополнительно, так что это означает, что цепочка сертификатов сначала должна быть действительной, а затем вы можете закрепить ее?
Я тоже думаю все больше и больше, будет ли эта идея работать. Потому что тогда мы увидим больше использования этой техники. Каждый мог бы создать самозаверяющий сертификат и просто прикрепить его... И сэкономить несколько долларов на доверенном сертификате CA. Или что я понял неправильно или неправильно в отношении всей концепции?
3 ответа
HPKP не заменяет обычную проверку. Вместо этого это дополнительно к обычной проверке. Таким образом, если обычная проверка не пройдена, поскольку сертификат самоподписан, HPKP не поможет.
Является ли самозаверяющий сертификат выданным для данного локального имени хоста (например, mylocalserver) и закрепленным в ответе сервера, даже действительным? Будет ли это даже работать?
Да, HPKP просто объявляет подпись для данного сертификата x.509. Браузер (или любой веб-клиент) просто кэширует его на указанный период, а затем проверяет эту подпись во время последующих посещений.
Работает ли закрепление сертификата для локальных имен хостов (это означает, что оно работает только с именами доменов)?
Локальное имя хоста - это имя хоста, как и любое другое. Даже если это коротко. Даже если у него есть местный ДВУ. Дело в том, как ваш клиент разрешает это и что он запрашивает в Host:
заголовок HTTP-запроса. Если он разрешает foobar хоста на правильный IP, а затем спрашивает это Host:
в HTTP-запросе, а самозаверяющий сертификат имеет CN, установленный в foobar, тогда вся схема начинает работать.
Должен ли закрепленный сертификат сначала быть действительным или доверенным ЦС (это означает, что самозаверяющие сертификаты нельзя закрепить - если они не добавлены в хранилище доверенных сертификатов на клиенте)?
Нет, они этого не делают. Однако у вашего веб-клиента должен быть способ доверять сертификату сервера. Либо он помещается в список сертификатов доверенных серверов, либо вы создаете исключения (на самом деле это то же самое, что и предыдущие), либо вы создаете локальный ЦС и подписываете сертификат сервера своим сертификатом локального ЦС. Самозаверяющий сертификат сервера - это просто способ пропустить создание локального ЦС. Кстати, все официальные центры сертификации используют самозаверяющий сертификат в качестве корневой точки своей инфраструктуры открытых ключей. Это законный способ создания ЦС. Официальный ЦС - это просто ЦС, сертификат которого добавляется в доверенное хранилище наиболее известного программного обеспечения, такого как ОС, браузеры и т. Д. Ведение переговоров о добавлении стоит денег, поэтому большинство из них не являются бесплатными.
Какой самый простой способ получить действительный SSL локально, чтобы мне не нужно было настраивать клиент (клиент Trust Store)?
Получение самозаверяющего сертификата на каждую имеющуюся услугу. Если у вас есть только несколько таких служб, вы имеете дело с самозаверяющими сертификатами, если у вас есть десятки, вы создаете свой локальный центр сертификации. Существует также законный бесплатный способ получения общедоступных сертификатов X.509 - просто используйте центр сертификации LetsEncrypt - это бесплатно. Тем не менее, они не предоставляют групповые сертификаты - те, с *
и это может быть проблемой, если у вас огромное количество услуг.
Можем ли мы увидеть закрепление сертификата как альтернативу доверенному центру сертификации? Я где-то читал, что это просто дополнительно, так что это означает, что цепочка сертификатов сначала должна быть действительной, а затем вы можете закрепить ее?
Нету. Закрепление сертификата является контрмерой для атак "человек посередине", когда кто-то выдает себя за целевой CA. Для этого этот "кто-то" должен уже поместить свой корневой сертификат CA в ваше хранилище доверенных сертификатов, но это еще одна проблема.
Я тоже думаю все больше и больше, будет ли эта идея работать. Потому что тогда мы увидим больше использования этой техники. Каждый мог бы создать самозаверяющий сертификат и просто прикрепить его... И сэкономить несколько долларов на доверенном сертификате CA. Или что я понял неправильно или неправильно в отношении всей концепции?
Вы определенно.
После дальнейших исследований, так как я действительно хотел копаться до фактической спецификации.
Так RFC 7469 говорит:
2.3.1. Обработка поля заголовка ответа с открытым ключом
Если агент UA получает через защищенный транспорт HTTP-ответ, который включает в себя поле заголовка PKP, соответствующее грамматике, указанной в разделе 2.1, и нет никаких ошибок или предупреждений безопасного транспорта...
Так что теперь официально ясно, что сначала должно произойти правильное рукопожатие SSL (включая проверку цепочки сертификации), а затем может произойти HPKP...