Експортиране на сертификатите от P12 без частния ключ
Пакетът PKCS12 държи ключовете и сертификатите заедно. Първо прочетете структурата, след което изберете сертификатите с -nokeys, вместо да премахвате защитата.
Заявката за поддръжка пита кой сертификат се намира в VPN пакета, а първият импулс е да се експортира всичко и да се прикачи. Файлът P12 опакова сертификатите и материала на частния ключ в един контейнер, така че експортирането на всичко е точно това, което не бива да изпращате. Командата, която отговаря на въпроса, е проблем на избор, а не на преобразуване. Коя половина от контейнера получавате решават четири флага, а два от тях звучат по-безопасно, отколкото са.
Започнете с четене на контейнера, вместо с изпразването му.
Какво всъщност съдържа файлът PKCS12
Контейнерът PKCS12 съдържа един или повече сертификата, възможно частен ключ и message authentication code върху съдържанието. Сертификатите може да включват крайния сертификат на вашата клиентска идентичност и междинните сертификати, които го свързват с CA. Ключът, когато е наличен, е това, което прави файла тайна, а не документ.
Тази разлика е причината -nokeys да съществува и да е флагът, който тази задача изисква.
Прочетете пакета, без да изписвате ключа
Формата за преглед изписва структурата и подробностите за алгоритмите и не записва нищо: openssl pkcs12 -in client.p12 -info -noout. Пита за паролата за импортиране, което е правилното място за тази стойност, и ви казва дали файлът изобщо съдържа ключ. Използвайте -passin env:PKCS12_PASS, когато паролата не може да бъде въведена, защото парола в команда на shell е парола в списъка на процесите. Тази стъпка не експортира нищо и това е целият смисъл.
В изхода прочетете три неща: колко сертификата, има ли ключ и кои алгоритми го защитават.
Използвайте -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, или за случай на поддръжка, който е поискал конкретен артефакт. Всяко извличане премахва един слой и би трябвало да има причина.
Публичните сертификати не съдържат частния ключ, но съдържат имена и данни за организацията. Споделете полетата, които заявката поиска, вместо файла, освен ако не е поискан точно файлът.