1

Я выполнил следующие команды для создания подписи для файла (ядро Linux):

openssl req -newkey rsa -keyout codesign.key -out codesign.req
openssl ca -config ca.cnf -extensions codesigning -in codesign.req -out codesign.crt

openssl cms -sign -binary -noattr -in vmlinuz -signer codesign.crt -inkey codesign.key -certfile ca.crt -outform DER -out vmlinuz.sig

Файл ca.cnf предназначен для моей собственной инфраструктуры ЦС и имеет расширение использования ключа digitalSignature и расширение использования расширенного ключа codeSigning.

Формат Ca.cnf:

[ca]

default_ca = ca_default

[ca_default]

сертификат = ca.crt

private_key = ca.key

серийный = ca.srl

база данных = ca.idx

new_certs_dir = /home /apoorv /projects / подписано

default_md = по умолчанию

policy = policy_anything

сохранить = да

default_days = 90

unique_subject = нет

[policy_anything]

countryName = необязательно

stateOrProvinceName = необязательно

localityName = необязательно

organizationName = необязательно

organizUnitName = необязательно

commonName = необязательно

emailAddress = необязательно

[ пересекать ]

basicConstraints = критический, CA: верно

keyUsage = критический, cRLSign, keyCertSign

[кодирование]

keyUsage = digitalSignature

extendedKeyUsage = codeSigning

Команда: openssl cms -verify -binary -content vmlinuz -inform DER -в vmlinuz.sig -CAfile ca.crt

Выход:

Ошибка проверки 140187569694352: ошибка: 2E099064: подпрограммы CMS: CMS_SIGNERINFO_VERIFY_CERT: ошибка проверки сертификата: cms_smime.c: 287: ошибка проверки: неподдерживаемое назначение сертификата

Не могли бы вы предоставить какой-либо вклад ?? Большое спасибо.

1 ответ1

1

Как должно быть ясно из справочной страницы в вашей системе или в Интернете, если предположить, что сертификат CA, указанный в вашем файле ca.cnf, называется ca.crt и является корневым сертификатом, то основная функция, которую вы хотите:

openssl cms -verify -binary -content vmlinuz -inform der -in vmlinuz.sig -CAfile ca.crt 

за исключением того, что по умолчанию требуется ExtendedKeyUsage, если присутствует включает "emailProtection" id-pkix 3 4, а не (исключительно) codeSigning; переопределить это добавление -purpose any .

Если иерархия сертификатов более сложная, т. Е. Если она использует цепочку, то существует множество случаев, в зависимости от того, какие сертификаты включены в файл подписи с помощью -certfile , какие сертификаты установлены по умолчанию или указали файл trustore и / или каталог и в -certfile если он используется, и указали ли вы -partial_chain в версии 1.0.2 и без более конкретного вопроса, у меня нет времени писать так много.

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