Какие пакеты OpenVPN защищает дайджест auth?
Опция auth охватывает меньше, чем подсказывает профиль. Разберите канал, случай AEAD и защиту управляющего канала, прежде чем задавать политику дайджеста.
Большинство споров о дайджестах OpenVPN начинается не с того пакета. Читать auth SHA256 как «принимать только тех партнёров, которые предлагают SHA256», — первое, от чего нужно отвыкнуть. Опция называет дайджест для определённых пакетов, и то, какие это пакеты, зависит от канала и от того, является ли этот канал AEAD. Пройдите четыре вопроса ниже по порядку; каждый сужает то, что настройка может означать в вашем развёртывании.
Назовите канал, который настройка должна защищать
OpenVPN имеет управляющий канал, несущий трафик рукопожатия TLS, и канал данных, несущий полезную нагрузку туннеля. Дайджест auth играет роль в обоих, но не одну и ту же, и профиль редко делает разницу видимой. Запишите, какой из двух вы пытаетесь ограничить, прежде чем трогать файл конфигурации.
Таблица ниже — краткая версия того, как одна и та же опция попадает в каждый контекст.
| Context | What the auth digest does |
|---|---|
| Data channel without AEAD | Selects the HMAC digest that authenticates each data packet |
| Data channel with AEAD, such as GCM | Unused for the data channel; the cipher authenticates its own packets |
| Control channel protected by tls-auth | Selects the HMAC digest for that protection, even when data is AEAD |
Проверьте, является ли канал данных AEAD, прежде чем на него полагаться
Если согласованный шифр данных — AES-GCM или CHACHA20-POLY1305, канал данных аутентифицирует сам себя, и отдельный дайджест не выполняет ту работу, которую вы, возможно, представляете. Оба являются конструкциями AEAD, поэтому целостность создаётся той же операцией, что шифрует нагрузку. Это не понижение уровня, но означает, что политика, обоснованная как «каждый пакет данных — HMAC-SHA256», фактически неверна на этом туннеле. Подтвердите согласованное значение в журнале сервера или в выводе состояния клиента, прежде чем переписывать политику.
Изучайте шифр, который действительно был согласован, а не список в профиле, потому что переговоры могут остановиться на другом члене набора. data-ciphers AES-256-GCM:AES-128-GCM — это список для переговоров, и обе записи AEAD, поэтому ни одна из них не расходует дайджест auth на защиту нагрузки.
Относитесь к защите управляющего канала как к отдельному решению
tls-auth добавляет HMAC к пакетам управляющего канала и берёт свой дайджест из настройки auth, поэтому у туннеля AEAD всё ещё может быть осмысленно настроенный дайджест. tls-crypt — другая схема с собственной фиксированной защитой, поэтому не предполагайте, что она наследует каждое свойство tls-auth. Читайте документацию выбранного механизма, а не переносите допущения между ними.
Обе стороны должны также договориться о схеме и о направлении ключа. Совпадающий дайджест, но файл ключа, использованный в неверном направлении, даёт рукопожатие, которое срывается по причинам, которые настройка дайджеста объяснить не может.
Держите auth отдельно от переговоров о шифрах и от сертификатов
Три настройки постоянно путают: дайджест auth, список шифров данных и алгоритм подписи сертификата. Изменение первой не перевыпускает сертификат, не выбирает его дайджест подписи и не создаёт метод «пользователь-пароль». Определения опций протокола в исходниках OpenVPN 2.6 описывают каждую в своём разделе, что служит полезным напоминанием: это независимые регуляторы.
Когда партнёр отказывается подключаться после смены дайджеста, причина обычно в несоответствии одной из двух других настроек. Прочитайте обе стороны, прежде чем менять любую из них.
Запишите политику и сравните её с работающими конфигурациями
Заявление на уровне парка должно в одном предложении явно назвать разрешённые режимы канала данных и выбранную защиту управляющего канала. Это предложение проверяемо; «мы используем SHA256» — нет. Затем сравните его с действующими профилями сервера и клиента, а не с шаблоном в репозитории.
Завершите записью того, о чём каждый туннель действительно договорился и какой механизм аутентифицировал его пакеты. Видимая строка auth в профиле — доказательство только намерения конфигурации, а намерение — самая дешёвая часть проверки.