Файл DH чи ключ tls-auth? Як розрізнити два файли OpenVPN
Один файл зберігає відкриті параметри групи, другий — спільний секретний матеріал. Три умови визначають, до якої директиви належить кожен.
Два файли, дві директиви й звичка називати обидва за тим, що вони налаштовують. Так dh.pem потрапляє в рядок tls-auth, а клієнт падає з повідомленням про неочікуваний формат ключа. Рішення перед вами не про те, який файл сильніший. Про те, яка роль справді потрібна розгортанню, і три умови це вирішують: який обмін ключами погодить ваш стек TLS, чи потрібна вам узагалі автентифікація каналу керування і чи має матеріал залишатися секретним.
Відповідайте на них по порядку, і питання про файл вирішиться саме. Пропустіть їх — і назви директив почнуть здаватися взаємозамінними, а саме з цього стану й виникає помилка.
Прочитайте мітку раніше за ім'я файлу
Перший рядок файлу інформативніший за ім'я, бо ім'я — людська умовність, а мітку створює інструмент. Параметри Diffie-Hellman несуть мітку PEM BEGIN DH PARAMETERS. Статичний ключ OpenVPN — зовсім інша структура, зі своїм заголовком і шістнадцятковим навантаженням.
Перейменування нічого не перетворює. Файл параметрів з іменем ta.key залишається параметрами, а статичний ключ з іменем dh.pem залишається статичним ключем; парсер читає вміст і відхиляє невідповідність. Перевірте перед редагуванням профілю:
head -n 1 dh.pem
head -n 1 ta.keyТри умови, що визначають потрібний файл
Перша умова — обмін. Рукостисканню Diffie-Hellman у скінченному полі потрібна група, і директива dh — те місце, де сервер називає для неї параметри. Рукостисканню на еліптичній кривій цей файл зовсім не потрібен, бо крива і є набір параметрів. Якщо ваш сервер погоджує лише набори ECDHE, файл DH — мертвий вантаж, а не додаткова міцність.
Друга умова — автентифікація каналу керування, окрема функція зі своїм матеріалом. Файл tls-auth — це спільний статичний ключ, який мають обидві сторони і яким підписують пакети каналу керування, щоб неавтентифікована сторона не могла навіть завершити рукостискання. Він існує незалежно від того, чи використовуєте ви DH у скінченному полі, і не має нічого спільного з параметрами групи.
Третя умова — секретність і поширення. Параметри DH можна публікувати, не послаблюючи сеанс, бо секретні значення створюються для кожного рукостискання і ніколи не покидають сторони. Статичний ключ публікувати не можна: це ті самі байти на обох кінцях, він сам не змінюється, і будь-хто, хто його має, може створювати дійсні підписи каналу керування. Ці дві відповіді ведуть до цілком різних правил поводження, тому один файл може лежати в репозиторії, а другий — ні.
Створюйте правильний матеріал для кожної ролі
Використовуйте інструмент, який створює формат, очікуваний директивою, замість перетворення між ними. Для спільного ключа в OpenVPN 2.6 типізована форма генератора прямо вказує призначення.
openvpn --genkey tls-auth ta.keyЦя команда створює новий секретний матеріал; вона не ремонтує й не перевіряє наявний ключ, а повторний запуск дає інший ключ, якого немає в інших сторін. Скопіюйте отриманий файл потрібним сторонам каналом, який ви використали б для будь-якого спільного секрету, і дотримуйте послідовності угоди про напрямок: з tls-auth одна сторона використовує key-direction 0, а друга — key-direction 1.
Параметри DH, коли вони потрібні, беруться з генерації параметрів, а не з генератора ключів, і їхнє походження важливе навіть тоді, коли результат відкритий. Група, взята з невідомого джерела, не стає надійною від того, що вона відкрита; вона все ще має бути групою, з якою згодні ваші сторони, і такою, яку не послаблює її розмір чи будова.
Що означає dh none і що не означає
dh none це справжня директива з вузьким значенням: жоден файл параметрів скінченного поля не буде завантажено, бо рукостискання використовує Diffie-Hellman на еліптичній кривій. Це не скорочення для «пропустити крок DH» у сенсі послаблення чогось, і вона точно не велить OpenVPN прийняти інший файл як заміну.
З неправильного читання випливають дві помилки. Перша — припускати, що dh none знімає потребу в tls-auth, тоді як ці дві речі керують різним. Друга — тримати застарілий рядок dh поруч із конфігурацією лише на кривій і потім гадати, який файл сервер насправді використовує; якщо директива присутня, файл читається, і зламаний шлях там валить запуск з причини, не пов'язаної з обміном, який буде погоджено.
Якщо неправильний файл уже розгорнуто
Відновіть потрібний секрет у власника профілю і не чіпайте перевірку сертифіката, поки це робите. Збій — це невідповідність формату, а не збій довіри, і вимкнення перевірки, щоб обійти помилку, замінює проблему запуску тихою проблемою.
Потім розділіть дві події, які люди схильні зливати. Публікація файлу параметрів DH майже нешкідлива, бо параметри були відкритими за задумом. Розголошення ключа tls-auth — інша подія: ключ автентифікує пакети каналу керування для кожної сторони, що його має, тому заміну треба узгоджувати в усьому розгортанні, а не застосовувати на одному хості.
Перевірка за п'ять хвилин вирішує, який у вас випадок: прочитайте перший рядок кожного файлу, підтвердьте директиву, що на нього посилається, і підтвердьте, що поширення файлу відповідає вимогам матеріалу. Це менша робота, ніж створити заново робочу PKI, і саме до цього весь час вели три умови.