OpenVPN без CA: как peer-fingerprint проверяет партнёров
Отпечаток закрепляет один сертификат, а не общий секрет. Проследите, что покрывает дайджест, как каждая сторона строит свой список разрешённых и во что обходится продление.
Небольшое развёртывание тянется к отпечаткам, потому что удостоверяющий центр выглядит как инфраструктура, на которую ни у кого нет времени. Инстинкт разумен, а короткий путь, который люди выбирают вместо него—копирование одного секрета канала данных на оба конца—нет. Настройка peer-fingerprint сохраняет структуру TLS нетронутой: каждая сторона по-прежнему держит свой закрытый ключ и сертификат, и каждая сторона по-прежнему проверяет другую. Меняется то, где закреплена проверка: от доверенного издателя к короткому списку закреплённых дайджестов. Поскольку дайджест покрывает весь сертификат, а не имя, продление становится операцией, которая действительно отнимает время.
К чему на самом деле обязывает отпечаток
Отпечаток сертификата — это дайджест всего сертификата в кодировке DER, а не его открытого ключа и не имени его субъекта. Поэтому два сертификата с одинаковыми именами и одним и тем же ключом, но разными сроками действия имеют разные отпечатки. Это делает закрепление точным и это же делает продление хлопотным. Закрепление не может означать доверие к ключу вообще, потому что оно называет один артефакт в один момент его жизни. Дайджест может знать кто угодно, и само знание ничего не доказывает.
openssl x509 -in server.crt -noout -fingerprint -sha256
openssl x509 -in client-07.crt -noout -fingerprint -sha256
Владение соответствующим закрытым ключом — это то, что доказывает, что партнёр держит этот сертификат, а дайджест — это то, как другая сторона решает, ожидала ли она этот сертификат вообще. Это разделение — причина, по которой этот проект не прежний порядок с общим секретом: общий ключ аутентифицирует любого, кто знает те же байты, тогда как закрепление аутентифицирует один сертификат. Другое устройство получает собственную запись, а не копию того же секрета, что является малым различием в файлах и большим в масштабе ущерба.
Карта взаимна, а не симметрична
Каждому концу нужны две вещи: собственный закрытый ключ с сертификатом и заявление о том, какие сертификаты партнёров он примет. У клиента это заявление — дайджест сертификата сервера; у сервера это список дайджестов зарегистрированных клиентов. Официальный пример для небольшой конфигурации для Community 2.6 показывает устройство с peer-fingerprint, и его стоит прочитать перед выбором этой модели доверия для реального развёртывания. Два направления не являются одним перевёрнутым списком, и они не отказывают в один и тот же момент.
| Verification direction | What is pinned | What never leaves that endpoint | How a wrong pin shows up |
|---|---|---|---|
| Client checks the server | One digest, for the server certificate | The server private key | The client aborts during the TLS handshake |
| Server checks the client | A digest per enrolled client | Each client private key | The server rejects the peer before a tunnel exists |
Добавление устройства правит список разрешённых на сервере, не копируя закрытый материал существующего клиента и никуда не перемещая ключ сервера. Два направления также отказывают независимо, что полезно при диагностике: та сторона, которая закрывает рукопожатие, и есть сторона, чьё ожидание не оправдалось. Если клиент отвергает сервер, дайджест не совпадает с предъявленным сертификатом. Если сервер отвергает клиента, дайджеста этого клиента нет в списке, или клиент предъявляет другой сертификат, не тот, что был зарегистрирован.
Регистрация: как присоединяется новое устройство
Сгенерируйте ключ и сертификат нового устройства там, где будет жить закрытый ключ, затем перенесите только публичный артефакт той стороне, которой нужно его закрепить. Передайте ожидаемый дайджест по каналу, которому вы уже доверяете, и сравните сертификат целиком, а не знакомое на вид имя. Дайджест, скопированный из той же непроверенной загрузки, что и сертификат, доказывает лишь то, что два файла согласуются друг с другом. Это проверка согласованности, а не личности, и это самый тихий способ ослабить этот проект.
На сервере добавление дайджеста — это изменение конфигурации, которое проходит через обычный менеджер и сопровождается переподключением. Убедитесь, что новое устройство подключается, а устройство, чей дайджест удалён, больше не подключается. Тест, покрывающий только положительный случай, оставляет список разрешённых непроверенным, и именно в таком состоянии вы будете через полгода.
Продление — дорогой момент
Каждый сертификат истекает, и новый сертификат имеет новый дайджест, даже когда ключ и имена остаются теми же. При издателе продление прозрачно для партнёров, доверяющих этому издателю; при закреплении это событие регистрации для каждого партнёра, который закрепляет сертификат.
Планируйте порядок до даты истечения, а не после неё. Распределите новый дайджест сторонам, которые его проверяют, примените изменение и только затем замените сертификат на конце. Такой порядок не оставляет окна, в котором две стороны расходятся в том, какой сертификат текущий. Держите под пересмотром и сам список, потому что закреплённый список накапливает записи устройств, выведенных из эксплуатации месяцы назад. Каждая устаревшая запись — это личность, которая всё ещё аутентифицируется, если её ключ выживет, поэтому удалить одну — это действие по безопасности, а не уборка.
Чего карта доверия не решает
Аутентификация — это один слой, и закреплённая карта ничего не говорит о пуле адресов, продвигаемых маршрутах, MTU пути или политике межсетевого экрана. Они остаются отдельной конфигурацией с отдельными режимами отказа. Туннель, который аутентифицируется и не пропускает трафик, — это другое расследование, чем тот, который никогда не поднимается.
Карта тоже не масштабируется бесконечно, и PKI на основе издателя — это то, к чему приходят более крупные развёртывания. Это предпочтение про эксплуатацию, а не про криптографию, потому что добавлять и выводить личности через один орган дешевле, чем править список у каждого партнёра по мере роста парка. Там, где реализация клиента не поддерживает эту опцию, ответ — совместимая модель доверия, которую этот клиент документирует, или поддерживаемая замена. Подавление предупреждения о проверке не добавляет этой поддержки, и вся ценность проекта в том, что проверка всё ещё происходит.