Ошибка шифра TLS в OpenVPN: сначала сравните оба узла
Ошибка «нет общего шифра» относится к контрольному каналу TLS, а не к data-ciphers. Сначала сравните версии, затем списки наборов, а затем докажите согласование.
Ошибка «нет общего шифра» звучит как одна настройка, которую нужно изменить, и настройка, которую меняет большинство, — не та. OpenVPN держит отдельные политики для контрольного канала, который выполняет рукопожатие TLS, и для канала данных, который несёт пакеты внутри туннеля, а ошибка называет первый, тогда как люди правят второй. Сравнение того, что разрешает каждая сторона, в правильном порядке превращает догадки в два или три решения: версия, затем список наборов, затем учётные данные.
Ошибётесь в этом порядке — и можно потратить час, добавляя имя AES в список, который никогда не читался.
Два списка шифров, и только один ломает рукопожатие
Контрольный канал согласует сеанс TLS, и его политика записывается через tls-cipher для TLS 1.2 и tls-ciphersuites для TLS 1.3. Канал данных настраивается отдельно через data-ciphers, где несовпадение даёт соединение, которое устанавливается и затем не пропускает трафик. Оба дают ошибки, где упоминаются шифры, поэтому их путают. Рукопожатие, которое никогда не завершается, указывает на контрольный канал, а установленный туннель, теряющий пакеты, — на канал данных.
Читайте всё сообщение, а не первую строку. Несовпадение версий, отсутствующий набор, алгоритм подписи сертификата, который сторона отвергает, и неудачная проверка имени узла — всё заканчивается ошибкой TLS, и только одна из них касается вашего списка наборов. Разделение этих категорий и есть большая часть диагностики.
Сравните версии раньше, чем наборы
Сторона, ограниченная TLS 1.2, и сторона, требующая 1.3, не имеют общей версии, и никакая строка шифров это не соединит. Запишите tls-version-min и tls-version-max с обеих сторон или значения по умолчанию используемых сборок, потому что политика OpenSSL в дистрибутиве может поднять нижнюю границу без единого слова в опциях OpenVPN. Если одна сторона — устройство или сторонний клиент, её окно — то, что разрешает прошивка. Сравнение наборов имеет смысл только после того, как окна перекрываются.
В этих записях должны быть и настоящие исполняемые файлы. Командный openvpn на вашем ноутбуке не обязательно тот клиент, который обслуживает импортированный профиль.
Списки TLS 1.2 и TLS 1.3 не смешиваются
Имена наборов TLS 1.2 выглядят так: ECDHE-RSA-AES256-GCM-SHA384 и относятся к tls-cipher, который принимает строку шифров OpenSSL. Наборы TLS 1.3 называются TLS_AES_256_GCM_SHA384 и относятся к tls-ciphersuites; добавление одного в строку 1.2 не настраивает список 1.3, и парсер может принять текст, ни разу его не сопоставив. Фильтр, верный для одной версии, ничего не говорит о другой. Запишите, для какой версии предназначен каждый список.
openvpn --show-tls печатает то, что поддерживает локальная сборка, и это перечень, а не обещание: удалённая сторона может не разрешать эти наборы, а активный профиль может их не включать. Используйте его, чтобы исключить сборку, которая вообще не может предложить набор, а затем сравните настроенные списки.
Докажите согласование на новом соединении
Успешное рукопожатие — единственное доказательство, которое считается, и оно должно исходить от настоящего клиента с настоящим профилем. Повысьте подробность сервера, подключитесь один раз и прочитайте из журнала согласованные версию протокола и набор, вместо того чтобы предполагать, что победило первое предложенное значение. Затем отдельно подтвердите канал данных трафиком через туннель, потому что работающее рукопожатие и сбойный канал данных — разные починки. Повторяйте после любого изменения конфигурации, потому что устаревший профиль клиента — частая ложноотрицательная причина.
Если утверждённой общей конфигурации нет, ответ — обновление или план миграции, а не ослабленная политика. Снижение tls-version-min, отключение проверки или включение всех старых наборов убирает отказ, не выполняя требование безопасности, которое его породило.
Запишите согласованные версию, набор и шифр данных в заявке на изменение. Следующий человек, столкнувшийся с ошибкой TLS, начнёт с этой записи, а не со строки шифров из сообщения на форуме.