Два файла, две директивы и привычка называть оба по тому, что они настраивают. Так dh.pem оказывается в строке tls-auth, а клиент падает с сообщением о неожиданном формате ключа. Решение перед вами не о том, какой файл сильнее. О том, какая роль действительно нужна развёртыванию, и три условия это решают: какой обмен ключами согласует ваш стек TLS, нужна ли вам вообще аутентификация канала управления и должен ли материал оставаться секретным.

Ответьте на них по порядку, и вопрос о файле решится сам. Пропустите их — и названия директив начнут казаться взаимозаменяемыми, а именно из этого состояния и возникает ошибка.

Прочитайте метку раньше имени файла

Первая строка файла информативнее имени, потому что имя — человеческое соглашение, а метку создаёт инструмент. Параметры Diffie-Hellman несут метку PEM BEGIN DH PARAMETERS. Статический ключ OpenVPN — совсем другая структура, со своим заголовком и шестнадцатеричной нагрузкой.

Переименование ничего не преобразует. Файл параметров с именем ta.key остаётся параметрами, а статический ключ с именем dh.pem остаётся статическим ключом; парсер читает содержимое и отклоняет несоответствие. Проверьте перед правкой профиля:

head -n 1 dh.pem
head -n 1 ta.key

Три условия, которые определяют нужный файл

Первое условие — обмен. Рукопожатию Diffie-Hellman в конечном поле нужна группа, и директива dh — то место, где сервер называет для неё параметры. Рукопожатию на эллиптической кривой этот файл вообще не нужен, потому что кривая и есть набор параметров. Если ваш сервер согласует только наборы ECDHE, файл DH — мёртвый груз, а не дополнительная прочность.

Второе условие — аутентификация канала управления, отдельная функция со своим материалом. Файл tls-auth — это общий статический ключ, который хранят обе стороны и которым подписывают пакеты канала управления, чтобы неаутентифицированная сторона не могла даже завершить рукопожатие. Он существует независимо от того, используете ли вы DH в конечном поле, и не имеет никакого отношения к параметрам группы.

Третье условие — секретность и распространение. Параметры DH можно публиковать, не ослабляя сеанс, потому что секретные значения создаются для каждого рукопожатия и никогда не покидают стороны. Статический ключ публиковать нельзя: это одни и те же байты на обоих концах, он не меняется сам, и любой, у кого он есть, может создавать действительные подписи канала управления. Эти два ответа ведут к совершенно разным правилам обращения, поэтому один файл может лежать в репозитории, а другой нет.

Создавайте правильный материал для каждой роли

Используйте инструмент, который создаёт формат, ожидаемый директивой, вместо преобразования между ними. Для общего ключа в OpenVPN 2.6 типизированная форма генератора прямо указывает назначение.

openvpn --genkey tls-auth ta.key

Эта команда создаёт новый секретный материал; она не ремонтирует и не проверяет существующий ключ, а повторный запуск даёт другой ключ, которого нет у остальных сторон. Скопируйте полученный файл нужным сторонам по каналу, который вы использовали бы для любого общего секрета, и держите соглашение о направлении последовательным: с tls-auth одна сторона использует key-direction 0, а другая key-direction 1.

Параметры DH, когда они нужны, берутся из генерации параметров, а не из генератора ключей, и их происхождение важно даже тогда, когда результат открыт. Группа, взятая из неизвестного источника, не становится надёжной от того, что она открыта; она всё ещё должна быть группой, с которой согласны ваши стороны, и такой, которую не ослабляет её размер или строение.

Что означает dh none и что не означает

dh none это настоящая директива с узким значением: ни один файл параметров конечного поля не будет загружен, потому что рукопожатие использует Diffie-Hellman на эллиптической кривой. Это не сокращение для «пропустить шаг DH» в смысле ослабления чего-либо, и она уж точно не велит OpenVPN принять другой файл в качестве замены.

Из неверного чтения следуют две ошибки. Первая — предполагать, что dh none снимает необходимость в tls-auth, тогда как эти две вещи управляют разным. Вторая — держать устаревшую строку dh рядом с конфигурацией только на кривой и потом гадать, какой файл сервер на самом деле использует; если директива присутствует, файл читается, и сломанный путь там валит запуск по причине, не связанной с обменом, который будет согласован.

Если неверный файл уже развёрнут

Восстановите нужный секрет у владельца профиля и не трогайте проверку сертификата, пока это делаете. Сбой — это несоответствие формата, а не сбой доверия, и отключение проверки, чтобы обойти ошибку, заменяет проблему запуска тихой проблемой.

Затем разделите два события, которые люди склонны сливать. Публикация файла параметров DH почти безвредна, потому что параметры были открытыми по замыслу. Разглашение ключа tls-auth — другое событие: ключ аутентифицирует пакеты канала управления для каждой стороны, которая его хранит, поэтому замену нужно согласовывать во всём развёртывании, а не применять на одном хосте.

Проверка за пять минут решает, какой у вас случай: прочитайте первую строку каждого файла, подтвердите директиву, которая на него ссылается, и подтвердите, что распространение файла соответствует требованиям материала. Это меньшая работа, чем заново создать работающую PKI, и именно к этому всё время вели три условия.

Похожие статьи