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

Спочатку назвіть об’єкт, потім значення

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

Запишіть і алгоритм. SHA-256 зараз звичайне очікування, але старі інструменти друкували SHA-1, якщо не попросити іншого, а 40-символьне шістнадцяткове значення — ознака того, що ви збираєтеся порівнювати дві різні речі.

Отримайте очікуване значення другим каналом

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

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

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

Витягніть значення на своєму боці

Для файлу сертифіката команда така: openssl x509 -in server.crt -noout -fingerprint -sha256. Явний дайджест важливий: без нього вивід залежить від вашої версії OpenSSL. Результат — шістнадцятковий рядок, розділений двокрапками, тому приберіть двокрапки й приведіть обидві сторони до нижнього регістру перед порівнянням.

Для кінцевої точки, яка говорить TLS напряму, підключіться й виведіть сертифікат через конвеєр: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Це працює для вебпанелі адміністрування або TLS-слухача, але не для OpenVPN, чий канал керування розташований усередині тунелю. Для OpenVPN читайте сертифікат із профілю на диску, замість того щоб намагатися перехопити його із сокета.

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

Умови зупинки

Зупиніться, якщо об’єкт інший, бо відбиток CA не може виправдати листовий сертифікат, а лист не може виправдати CA. Зупиніться, якщо алгоритм інший, бо значення SHA-1 проти значення SHA-256 вам нічого не каже. Зупиніться, якщо відбиток збігається, але сертифікат прострочений, відкликаний або виданий на інше ім’я; збіглий хеш не є перевіркою чинності й не лагодить зламаний ланцюжок. Зупиніться також, якщо серійний номер не збігається із серійним номером у записі, з яким ви звіряєтеся, бо це найдешевший спосіб помітити підмінений сертифікат.

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

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

Після порівняння

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

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

Схожі статті