Неприпустима версія TLS у AnyConnect на Linux: спершу визначте масштаб виправлення
Політика LEGACY для всього хоста, налаштування OpenSSL для окремого процесу та одноразова віртуальна машина в порівнянні, плюс зміна на шлюзі, яка остаточно прибирає помилку.
Ця помилка з'являється ще до запиту пароля, і це корисна частина: нічого ще не автентифіковано, тож проблема не в облікових даних. У Linux той самий діалог AnyConnect може походити від старої версії протоколу, 1024-бітної групи обміну ключами або набору шифрів, який відкидає криптографічна політика системи. Я усував її трьома різними способами на трьох машинах, і ці рішення різняться масштабом, а не винахідливістю. Кожне виправдане на своєму місці й погане значення за замовчуванням будь-де інде.
Прочитайте повідомлення, перш ніж чіпати політику
Збережіть точний рядок із діалогу. Скарга на версію вказує на рівень протоколу, скарга на сертифікат — на довіру або іменування, а невдалий вхід — на облікові дані. Шлюз, що пропонує TLS 1.0 з 1024-бітною групою DHE, AES-256-CBC і підписом SHA-1, може мати цілком дійсний сертифікат і все одно бути відкинутим сучасною політикою ще до надсилання ваших даних.
Перевірте кінцеву точку системним OpenSSL, використовуючи справжнє ім'я хоста й порт, який використовує клієнт.
Якщо openssl s_client -connect vpn.example.com:443 -servername vpn.example.com зазнає невдачі, а -tls1 -cipher DEFAULT@SECLEVEL=0 успішний, межа — це версія й розмір ключа разом. Якщо перша команда повідомляє про малий ключ DH, а не про попередження протоколу, версія гаразд і уваги потребує лише група. Ніколи не вкладайте в перевірку закритий ключ або пароль.
Варіант 1: послабити весь хост криптографічною політикою
У Fedora та RHEL 8 і 9 update-crypto-policies --set LEGACY знижує системну політику OpenSSL, а update-crypto-policies --show підтверджує, що активне. Зазвичай це відновлює тунель, але політика читається під час запуску процесу, тож перед повторною перевіркою перезапустіть клієнт і кожен породжений ним допоміжний процес. Вона також дозволяє старі протоколи й слабші групи кожному TLS-клієнту на машині — від браузера в сусідньому вікні до менеджера пакетів, що оновлює ядро.
Ця ширина — і весь сенс, і вся проблема. LEGACY діє на весь хост, є постійною і легко забувається, тому вона має бути діагностичним кроком або задокументованим винятком у керованій збірці, але ніколи — станом спокою робочої станції. Я бачив одну, що залишалася на LEGACY два роки, бо цього потребував один внутрішній портал, і ніхто не міг сказати, коли це почалося.
У Debian і Ubuntu немає одного перемикача для цього. Еквівалент — правка /etc/ssl/openssl.cnf, яка задає нижчий MinProtocol і CipherString = DEFAULT@SECLEVEL=0 у розділі системних значень за замовчуванням. Той самий масштаб, інший файл, трохи легше втратити з поля зору під час оновлення випуску.
Варіант 2: один файл конфігурації для одного клієнта
Налаштування OpenSSL для окремого процесу тримає зміну в межах одного дерева процесів, але лише якщо файл під'єднано так, як очікує бібліотека. Назвати розділ ssl_conf недостатньо: OpenSSL читає ключ верхнього рівня openssl_conf, іде за ним до розділу ініціалізації й лише тоді досягає значень SSL за замовчуванням.
openssl_conf = openssl_init
[openssl_init]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=0Спрямуйте OPENSSL_CONF на цей файл і запустіть клієнт VPN через обгортку, яка його експортує. Усе інше на хості зберігає політику за замовчуванням, і саме ця властивість важлива, коли постає питання відповідності. Переконайтеся, що файл справді діє, перш ніж звинувачувати шлюз: OPENSSL_CONF=/path/to/file openssl ciphers -s -tls1 має перелічити шифри TLS 1.0, а порожній результат означає, що ланцюг розірвано й клієнт мовчки зберіг системні значення за замовчуванням.
Файл чутливий до версії. OpenSSL 1.1.1 і 3.x приймають ті самі назви розділів, але обробка директив навколо постачальників змінилася в 3.x, тож перевіряйте за журналом самого клієнта й тестовим рукостисканням, а не припускайте, що файл було прочитано. Друкарська помилка в назві розділу призводить до відкритої відмови, і клієнт тихо використовує системні значення за замовчуванням.
Обмеження — охоплення. Усе, що злінковано з GnuTLS або NSS, ігнорує OPENSSL_CONF, як і будь-який допоміжний процес, який клієнт запускає, не успадковуючи середовище. Перевірте за допомогою ldd, з якою бібліотекою TLS двійковий файл справді злінковано, перш ніж будувати обгортку, бо відповідь визначає, чи існує цей варіант узагалі.
Варіант 3: одноразова віртуальна машина або контейнер
Для підрядника, який два тижні атакує один старий шлюз, виділена ВМ із послабленою політикою — чистіша межа, ніж робоча станція. Стара поверхня й повсякденний профіль браузера перестають ділити політику ядра, а утилізація — це видалення, а не знахідка аудиту.
Це все ще машина в мережі, тож обмежте доступ і тримайте її осторонь загального перегляду. Вартість обслуговування — ще один образ, який треба латати, що реально, але обмежено й помітно, на відміну від забутого прапорця LEGACY на ноутбуці.
Що залишає вам порівняння
Обирайте за трьома питаннями: кому потрібен старий протокол, на скільки й хто помітить, якщо виняток переживе свою причину. Один застосунок, одна людина, кілька днів вказують на налаштування для процесу. Цілий парк за одним пристроєм вказує на сам шлюз. Усе, що потребує постійної політики LEGACY на хості, — це закупівельне рішення в технічному костюмі.
Довговічне виправлення належить пристрою: TLS 1.2 або новіший, група щонайменше 2048 бітів, шифр AEAD і сертифікат із сучасним підписом. Попросіть власника пристрою про цю зміну, а потім підтвердьте узгоджені версію й шифр у журналі клієнта. Запишіть виняток разом із хостом, шлюзом, узгодженим протоколом, тим, хто погодив, і датою завершення, бо саме цей запис не дає тимчасовому обходу стати значенням за замовчуванням.