Невозможно.
Файлы PEM в общем случае могут содержать более одного «объекта», но большинство операций командной строки OpenSSL, включая эту, используют только первый тип требуемого типа - первый ключ в файле ключей, первый сертификат в файле сертификата, и т.д. В частности, если вам нужен и приватный ключ, и сертификат, как smime -sign
и вы, вы можете прочитать (первый) ключ и (первый) сертификат из одного файла. Несколько операций или опций используют все сертификаты в файле, но даже там вы не можете выбрать конкретную, кроме первой.
Файл PKCS12 содержит структурированные данные, которые могут связывать различные атрибуты, включая «friendlyname», с ключом и сертификатом. Когда вы «импорт» а PKCS12 с openssl pkcs12 -in file.p12 ...
выходом содержит те атрибуты, но в формате PEM они только комментарии и игнорируются, как и все остальное, что не в пределах действительной ----BEGIN x
для -----END x
блокирования. Точно так же, когда вы создаете PKCS12 с использованием, openssl pkcs12 -export -out file.p12 ...
вы можете указать значения friendlyname для перехода в PKCS12 в качестве параметров командной строки, но любые, которые находятся во вводе PEM, игнорируются. (Вы не можете указать другие атрибуты, хотя localkeyid генерируется автоматически.)
Вы можете использовать awk или аналогичный для выбора нужного блока (блоков) из файла, что-то вроде
awk -vwant=smeagol '/friendlyName:/ /^-----BEGIN/,/^-----END/' <manyPEM >onePEM # and then use onePEM
PS: выходной структурой данных smime -outform der
является CMS, которая является производной и часто все еще называется PKCS7. Не PKCS12, который сильно отличается. Называя его, .p12
можно запутать и ввести в заблуждение людей, таких как ваше будущее.