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

Прочитайте діалог, перш ніж правити профіль

Текст помилок сертифіката формує бібліотека під ним, а не встановлений вами VPN-продукт, тому точний рядок — ваш перший доказ. «Не вдається отримати сертифікат локального видавця» вказує на шлях або на якір довіри. «Термін дії сертифіката минув або він ще не чинний» вказує на час. «Непідтримуване призначення сертифіката» вказує на розширене використання ключа. Незбіг імені повідомляє, яке ім’я було потрібне. Жодну з чотирьох не виправляє перевстановлення клієнта.

Підвищте рівень журналювання, перш ніж щось змінювати. OpenVPN повідомляє про помилку перевірки навколо рукостискання, якщо запустити його з --verb 4, а strongSwan записує свої рішення про ідентичність і ланцюжок у журнал charon. Потім переконайтеся, який саме сертифікат ви вивчаєте, бо люди зазвичай перевіряють файл на диску, тоді як профіль вбудовує старішу копію. Коли профіль вбудовує блоки PEM, перевіряється саме вбудований сертифікат.

Засвідчувальний центр підписує ідентичності, а не дозволи

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

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

Відтворіть шлях, який намагається побудувати клієнт

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

openssl x509 -in server.crt -noout -subject -issuer -dates
openssl verify -CAfile root.crt -untrusted intermediate.crt server.crt
openssl verify -show_chain -CAfile root.crt -untrusted intermediate.crt server.crt

Нульовий код виходу означає, що шлях побудовано з цих файлів; помилка називає сертифікат, до якого не вдалося дійти. Якщо openssl verify успішний, а клієнт усе ще відмовляє, різниця в тому, що сервер фактично надсилає, або в тому, який файл довіри завантажує профіль. У OpenVPN проміжні сертифікати можуть іти разом із файлом сертифіката сервера або подаватися окремо з --extra-certs, а пакунок із двома коренями під одним іменем суб’єкта відправить одного з ваших клієнтів у неправильну гілку.

Ім’я та призначення — окремі брами

Побудова ланцюжка ніколи не питає, чи ваше це ім’я. OpenVPN перевіряє його лише тоді, коли профіль задає --verify-x509-name, а стара звичка зіставляти лише загальне ім’я ламається на сертифікатах, чиї ідентичності живуть у subjectAltName. Розгортання IKEv2 зіставляють налаштовану ідентичність із записами SAN або з відмітним ім’ям, залежно від клієнта, а значення з підстановочним знаком або %any тихо вимикає порівняння, яке ви вважали наявним.

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

Відкликання працює лише якщо хтось його налаштував

CRL або відповідь OCSP не перевіряються автоматично. На сервері OpenVPN клієнтські сертифікати звіряються зі списком лише тоді, коли --crl-verify вказує на нього. Перевірка сертифіката сервера на боці клієнта залежить від реалізації і часто відсутня. strongSwan потребує свого плагіна відкликання та політики, перш ніж дивитися на CRL для вузла.

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

Порядок ремонту, за якого перевірка залишається ввімкненою

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

Client saysMost likely gateFirst check
unable to get local issuer certificatetrust anchor or missing intermediateyour own openssl verify against the files the profile loads
expired or not yet validvalidity windowleaf and intermediate dates against the device clock
unsupported certificate purposeextended key usageserverAuth present, keyUsage allows the handshake
name mismatchpeer identitysubjectAltName entries versus the profile name

Пройдіть список за один прохід: підтвердьте файл, який завантажує профіль, побудуйте шлях самі, перевірте, що сервер надсилає проміжний сертифікат, порівняйте годинник, прочитайте SAN, прочитайте EKU, потім перепідключіться і спостерігайте, як той самий рядок журналу зникає. Якщо пристрою взагалі не можна дати CA, прив’язка — чесна альтернатива, бо OpenVPN 2.6 приймає --peer-fingerprint і звужує довіру до одного ключа замість того, щоб прибрати перевірку. RFC 5280 — довідка про значення кожного з цих полів.

Схожі статті