OpenSSL подписывает с PEM и ALIAS

332
Markino

Мне нужно прямо спросить об этом здесь, потому что после долгих поисков в 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
dave_thompson_085

Невозможно.

Файлы 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можно запутать и ввести в заблуждение людей, таких как ваше будущее.

Как я и подозревал. Большое спасибо за ответ. Markino 6 лет назад 0

Похожие вопросы