Два профілі обидва постачають файл з іменем ca.crt, один тунель піднімається, а інший завершується помилкою ланцюжка. Відкриття двох файлів поруч рідко це вирішує, а вимкнення перевірки вирішує це в неправильному напрямку. Питання, яке помилка насправді ставить, вужче: який сертифікат кожен процес завантажує як свій якір довіри і чи ці два є тим самим об'єктом? Дайте відповідь на це спочатку, і решта діагностики отримає напрямок. Ім'я файлу — це етикетка пакування, а шлях, записаний у профілі, також не є авторитетним, тому все залежить від того, що процес насправді читає.

Знайдіть сертифікат, який клієнт насправді завантажує

OpenVPN приймає центр сертифікації у двох формах, і форма визначає, які байти важливі. Профіль може вказувати на зовнішній файл через ca або вбудувати сертифікат у блок <ca> у самому профілі. Коли є обидва, перемагає вбудований блок, і файл поруч із профілем ніколи не відкривається.

Прочитайте збійний профіль і з'ясуйте, яку форму він використовує, перш ніж щось порівнювати. Копія, взята із сусіднього каталогу або з пакета, звідки прийшов інший профіль, нічого не каже про те, чому довіряє цей процес. Те саме стосується шляху в конфігурації: він розв'язується відносно місця запуску клієнта, а це не завжди той каталог, на який ви дивитеся. Читайте профіль, а не папку.

Сертифікати ідентифікуються за вмістом: відкритий ключ, суб'єкт і видавець, період дії та підпис над усім цим. Два файли з однаковими байтами — це один і той самий сертифікат, хоч би як їх називали, а два файли з однаковим ім'ям можуть бути незв'язаними центрами. Ім'я — це етикетка пакування, а не ідентичність.

Зніміть відбиток обох копій за допомогою openssl

Відбиток — це хеш поверх DER-кодування сертифіката, форми, яку покриває підпис, тому закінчення рядків і текст заголовка не можуть на нього вплинути. Обчисліть його для кожного файлу, і ви отримаєте два шістнадцяткові рядки, розділені двокрапками, які або збігаються, або ні. Щоб відповісти на питання порівняння, у сертифікаті не потрібно читати нічого іншого.

openssl x509 -in /etc/openvpn/office/ca.crt -noout -fingerprint -sha256
openssl x509 -in ~/profiles/lab-ca.pem -noout -fingerprint -sha256

Спокусливо спрямувати openssl на сам профіль, але він читає перший блок сертифіката, який трапляється у файлі, а профіль зазвичай містить <cert> перед <ca>. Вилучіть блок центру, потім зніміть відбиток вилученого файлу, бо саме цю копію клієнт справді використовуватиме.

sed -n '/^<ca>$/,/^<\/ca>$/p' office.ovpn | sed '1d;$d' > /tmp/office-ca.pem
openssl x509 -in /tmp/office-ca.pem -noout -fingerprint -sha256

Однакові відбитки означають, що матеріал довіри той самий, а помилка ланцюжка має іншу причину, і це інше розслідування. Різні відбитки означають різні сертифікати, і саме там починається наступний розділ.

Прочитайте невідповідність, перш ніж припускати атаку

Різні відбитки означають різні сертифікати і нічого більше. Перевипуск, ротація, перейменований центр або застарілий набір — усе це дає різні файли з цілком законними історіями. Який із них належить розгортанню — питання до оператора або до запису розгортання, а не до часу зміни файлу. Архіви копіюють часові позначки, тому новіший файл не є автоматично правильним якорем.

Корінь, який підписує сам себе, — це нормально, тому знахідка такого не є доказом проблеми. Завдання перевіряча — побудувати шлях від сертифіката сервера до виданого йому якоря, і помилка ланцюжка зазвичай означає, що цей шлях не вдалося завершити.

Перевірте, чи якір збійного профілю — це центр, з якого розгортання все ще видає. Якщо відбиток не збігається ні з чим у записі розгортання, профіль просто застарілий, і жодне налаштування на боці клієнта це не виправить.

Відновіть довіру, не вимикаючи перевірку

Короткострокове рішення — вимкнути перевірку або додати кожен сертифікат ланцюжка як якір. І те, і те змушує повідомлення зникнути, і те, і те змінює, які сервери клієнт прийматиме відтоді. Увімкніть перевірку знову, встановіть потрібний якір і повторіть тест.

Якщо ланцюжок тепер будується, але з'являється інша помилка, це прогрес: перевірка імені, дати дії та відкликання — це окремі перевірки з окремими повідомленнями. Тримайте пару відбитків і оригінальний текст помилки разом у заявці, щоб наступна людина бачила, який якір було завантажено і який очікувався. Пара відбитків достатньо мала, щоб вставити її в записку про передачу, і наступний випадок тоді займе п'ять хвилин замість половини дня.

Отримайте правильний центр тим самим автентифікованим каналом, який доставив профіль. Завантаження сертифіката із сервера тому, що його суб'єкт здається знайомим, — це інша дія, і вона тихо розширює те, чому клієнт довірятиме.

Схожі статті