Експорт сертифікатів із P12 без приватного ключа
Пакет PKCS12 зберігає ключі та сертифікати разом. Спершу прочитайте структуру, а потім виберіть сертифікати з -nokeys замість видалення захисту.
Заявка до підтримки запитує, який сертифікат міститься в пакеті 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, або для звернення до підтримки, де запросили конкретний артефакт. Кожне вилучення знімає один шар і має мати причину.
Публічні сертифікати не містять приватного ключа, але містять імена й відомості про організацію. Передавайте поля, які запросила заявка, замість файлу, якщо не запрошено саме файл.