Соединение OpenVPN не устанавливается, кто-то находит исправление в одну строку, добавляющее SECLEVEL=0, и туннель поднимается. Изменился не сертификат и не набор шифров; сдвинулся порог приёма на уровне всей библиотеки, и всё, что процесс делает потом, наследует новую границу. Это стоит понять до того, как та же строка будет скопирована в каждый профиль в среде.

Определите, какая библиотека и какая политика действуют

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

openvpn --version | head -3
openssl version -a

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

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

Разделите три вещи, которые могут быть отклонены

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

Ни один из этих трёх не является шифром канала данных. OpenVPN согласует шифрование туннеля отдельно от рукопожатия TLS, поэтому соединение, которое установилось после изменения уровня безопасности, ничего не говорит о том, какой шифр защищает ваши данные. Если вопрос, который вы на самом деле задаёте, касается конфиденциальности данных, вы смотрите совершенно не на ту ручку.

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

Меняйте входные данные, а не порог

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

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

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

Если снизить всё же нужно, ограничьте и задокументируйте

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

Запишите вместе с исключением четыре вещи: точную настройку, владельца, который её одобрил, затронутых клиентов и условие, при котором она будет удалена. Исключение без условия вывода — это постоянное ослабление с приложенным временным обоснованием.

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

Затем проверьте идентичность и защиту

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

openssl x509 -in /etc/openvpn/client.crt -noout -subject -dates -text | grep -E 'Signature Algorithm|Public-Key'
openvpn --show-tls | head -20

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

Передача, которая выдерживает аудит, говорит, какая политика отклонила какие входные данные, что было изменено и что в результате остаётся принимаемым. «Это работает с SECLEVEL=0» — наблюдение об одном соединении, а не оценка безопасности развёртывания.

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