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

Почніть із читання контейнера, а не з його спорожнення.

Що насправді містить файл PKCS12

Контейнер PKCS12 містить один або кілька сертифікатів, можливо приватний ключ і message authentication code над вмістом. Сертифікати можуть включати кінцевий сертифікат вашої клієнтської ідентичності та проміжні сертифікати, що пов'язують його з CA. Ключ, коли він присутній, — це те, що робить файл таємницею, а не документом.

Ця різниця — причина, чому -nokeys існує і чому саме цей прапорець потрібен завданню.

Прочитайте пакет, не виписуючи ключ

Форма перевірки друкує структуру й відомості про алгоритми та нічого не записує: openssl pkcs12 -in client.p12 -info -noout. Вона запитує пароль імпорту, що є правильним місцем для цього значення, і повідомляє, чи містить файл узагалі ключ. Використовуйте -passin env:PKCS12_PASS, коли пароль не можна ввести, бо пароль у команді оболонки — це пароль у списку процесів. Цей крок нічого не експортує, і в цьому весь сенс.

Читайте вивід заради трьох речей: скільки сертифікатів, чи є ключ і які алгоритми його захищають.

Використовуйте -nokeys і не плутайте його з -nocerts

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

Дворядкова форма, що створює файл сертифікатів і файл CA і більше нічого, виглядає так:

openssl pkcs12 -in client.p12 -nokeys -clcerts -out client-certificates.pem
openssl pkcs12 -in client.p12 -nokeys -cacerts -out ca-certificates.pem

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

Перевіряйте вивід, а не код повернення

Нульовий код повернення каже, що команда виконалася, а не що файл містить очікуване. Порахуйте сертифікати у виводі та прочитайте subject і дати: openssl x509 -in client-certificates.pem -noout -subject -dates -fingerprint. Порівняйте відбиток із тим, якого очікує команда підтримки, бо пакет із двома клієнтськими сертифікатами дає файл із двома блоками, а більшість інструментів читає лише перший. Призначення, довіра й збіг ключа — знову окремі перевірки.

Сертифікат, який розбирається, — це сертифікат, який розбирається. Це не сертифікат, який приймає VPN.

Вирішіть, чи потрібні вам файли взагалі

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

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

Схожі статті