SECLEVEL=0 лікує симптом, а не сертифікат
Зниження рівня безпеки OpenSSL розширює те, що бібліотека приймає. З'ясуйте, які вхідні дані було відхилено, перш ніж змінювати цю межу для всього хоста.
З'єднання 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» — спостереження про одне з'єднання, а не оцінка безпеки розгортання.