Ключі на 8192 біти зупиняють рукостискання; DH на 1024 біти відхиляється
Дві помилки розміру з протилежними виправленнями: завеликий ключ спалює час рукостискання, доки в іншої сторони не вичерпається тайм-аут, а мала група DH відхиляється ще до початку.
На одному сервері клієнти зависають на деякий час і потім перепідключаються, а інший одразу відхиляє з'єднання з повідомленням про розмір ключа. Вони виглядають як різні помилки, а це та сама помилка, спрямована в протилежні боки. Криптографія рукостискання має вартість, що зростає з розміром параметрів, і має нижню межу, нижче якої сучасні бібліотеки не опускаються. Підбір розміру матеріалу — це контрольний список, і перший пункт — вирішити, яка з двох помилок у вас насправді.
Прочитайте збій, перш ніж щось перегенеровувати
Час говорить про більшість. Рукостискання, яке триває кілька секунд і потім помирає, зазвичай означає, що обчислення пережило терпіння іншої сторони, що вказує на параметри, завеликі для обладнання або для тайм-ауту. Негайна відмова, що називає розмір ключа або групи, вказує в інший бік, на матеріал, який бібліотека взагалі не прийме.
Цим двом потрібні протилежні виправлення, і саме тут помиляється більшість спроб. Перегенерування параметрів на 8192 біти на клієнті, який уже відхилив малу групу, погіршує повільний випадок, нічого не роблячи для швидкого. Запишіть, який симптом ви спостерігали, перш ніж торкатися файлу.
Потім перевірте, що вимагається від іншої сторони. Сервер, налаштований на велику групу скінченного поля, змушує кожного клієнта витрачати той самий час процесора при кожному повторному узгодженні, а не лише при підключенні. Якщо проблема з'являється через рівні проміжки, а не при запуску, цей проміжок — сильна підказка, яке налаштування дороге. Повторне узгодження повторює все обчислення, тож зависання, що повертається щогодини, зазвичай та сама вартість, сплачена знову.
Повільний випадок: матеріал, який обладнання не може собі дозволити
Робота Diffie-Hellman і RSA швидко зростає з розміром ключа, і все це відбувається до того, як тунелем піде бодай якийсь трафік. На малому маршрутизаторі або малопотужному клієнті достатньо велика група може виштовхнути обмін за тайм-аут іншої сторони, тож з'єднання повторює спробу або просто виглядає завислим без жодної помилки.
Виправлення — спуститися до розміру, який підтримує кожна сторона і який кожен пристрій може спокійно обчислити. Ключ RSA на 2048 біт і група на 2048 біт залишаються широко сумісною базовою лінією; більше допомагає лише тоді, коли всі сторони згодні й процесор може оплачувати це при кожному повторному узгодженні. Усе вище цієї базової лінії — навмисний компроміс, а не оновлення.
Розмір — не оцінка, і найбільше число в таблиці порівняння не є автоматично правильним вибором. Виберіть найменше значення, яке дозволяє ваша політика і приймають усі сторони, а потім виміряйте рукостискання, замість того щоб припускати покращення. Менша група, яка все ще виходить за тайм-аут, каже вам, що розмір ніколи не був усією історією.
Швидкий випадок: група, яку бібліотека відхиляє
Сучасні збірки OpenSSL відхиляють найменші групи скінченного поля одразу, а підвищений рівень безпеки піднімає нижню межу ще вище. Прошивка маршрутизатора, що несе файл параметрів віком у десятиліття, — звичайне джерело, а симптом — з'єднання, яке одразу зазнає невдачі з повідомленням, що називає групу або розмір ключа. Ніщо в цьому збої не є періодичним, і саме це робить його легко впізнаваним.
Замініть файл, а не редагуйте конфігурацію, щоб обійти перевірку. Згенеруйте актуальну групу, перевірте її, а потім встановіть туди, де демон справді її читає. Тримайте старий файл, доки клієнт успішно не підключиться з новим:
openssl dhparam -out /etc/openvpn/ffdhe2048.pem 2048
openssl dhparam -in /etc/openvpn/ffdhe2048.pem -check -noout
ls -l /etc/openvpn/ffdhe2048.pemКоманда перевірки перевіряє файл і при успіху не друкує нічого корисного; список підтверджує, що ви замінили файл, який завантажує служба, а не застарілу копію поруч. Спрямуйте конфігурацію на цей шлях, перезапустіть демон і підтвердьте, що клієнт, який раніше зазнавав невдачі, тепер завершує рукостискання.
Якщо сервер також задає рівень безпеки або профіль сертифіката, прочитайте їх, перш ніж зробити висновок, що група була неправильна. Профіль, що вимагає суворішого класу, може відхилити матеріал, який типове значення прийняло б, а видалення цього налаштування — вужча зміна, ніж глобальне вимкнення перевірки.
Виберіть розмір для іншої сторони та обладнання
З'ясуйте, що витримує дальня сторона, перш ніж генерувати щось екзотичне. Пристрій, застарий для групи на 2048 біт, — це пристрій на заміну, адже спрямування сервера на слабшу групу лише перетворює скаргу на сумісність у простій. Стійкі виправлення рухаються до новішого програмного забезпечення, а не до старих параметрів. Кожен тимчасовий виняток у цій галузі має звичку ставати постійною конфігурацією.
Там, де межа — процесор сервера, змініть алгоритм, замість того щоб опускатися нижче політики. Обмін ключами на еліптичній кривій, наприклад X25519, драматично дешевший за велику групу скінченного поля і широко підтримується, що робить його кращою відповіддю на скаргу щодо продуктивності, ніж менший модуль RSA.
Що б ви не вибрали, перевірте одним реальним з'єднанням і стежте, скільки триває рукостискання, а не лише чи воно зрештою підключиться. З'єднання, яке вдається за дванадцять секунд, має ту саму кореневу причину, що й те, яке зривається на п'ятнадцяти.
Запишіть вибір, щоб перезбирання не могло його скасувати
Тримайте файл параметрів під керуванням конфігурацією і поруч запишіть розмір, причину й дату. Перезібраний сервер, який тихо генерує власні типові значення, — це шлях, яким та сама помилка повертається через шість місяців, і ніхто не може пояснити початкове рішення.
Запишіть ту саму інформацію поруч із кінцевою точкою та профілем, щоб огляд не мусив відновлювати її з розміру файлу. Коли наступне з'єднання зависне, ця нотатка — різниця між п'ятихвилинною перевіркою та новим розслідуванням. Вона також заважає наступному інженеру вирішити повільний випадок виправленням, призначеним для швидкого.