1

Мне нужно прямо спросить об этом здесь, потому что после долгих поисков в Google и поиска в StackExchange я до сих пор не нашел ничего подходящего.

Итак, скажем, я использую OpenSSL (на платформе Windows, если это имеет значение) и файл .pem для подписи файла .txt; команда, которую я использую

openssl smime -sign -in unsignedfile.txt -outform der -binary -nodetach -out signedfile.txt.p12 -signer certificate.pem -passin pass:PASSWORD

Все идет нормально.

У меня вопрос: должен ли файл .pem содержать БОЛЬШЕ, ЧЕМ ОДИН пары пар приватный ключ / сертификат - каждая из них идентифицируется "friendlyName" (который я понимаю как псевдоним, идентификатор), как мне указать псевдоним, который я хочу использовать? в командной строке выше?

Это вообще возможно?

Я искал опцию -alias по адресу https://wiki.openssl.org/index.php/Command_Line_Utilities, но мало помог.

Заранее спасибо.

1 ответ1

0

Невозможно.

Файлы 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:/{sel=($2==want)} /^-----BEGIN/,/^-----END/{if(sel)print}' <manyPEM >onePEM
# and then use onePEM

PS: структура данных, выводимая smime -outform der представляет собой CMS, которая получена и часто все еще называется PKCS7. Не PKCS12, который сильно отличается. .p12 может ввести в заблуждение и ввести в заблуждение людей, таких как ваше будущее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .