Помилка «немає спільного шифру» звучить як одне налаштування, яке треба змінити, і налаштування, яке змінює більшість, — не те. 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, почне з цього запису, а не з рядка шифрів з повідомлення на форумі.

Схожі статті