Использование скрипта для загрузки движка в Openssl и использования его для подписи файла

#bash #openssl

#bash #openssl

Вопрос:

Я хочу подписать файл, используя закрытый ключ на смарт-карте. Использование этих команд:

 openssl
engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/opensc-pkcs11.so
dgst -engine pkcs11 -sign slot_0-id_1 -keyform engine -sha256 -out signature.bin textToSign.txt
quit
 

он отлично работает в терминале.
Я хотел бы написать небольшой скрипт, который подписывает файл с помощью этих команд.
Это выглядит так:

 #/bin/bash
openssl engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/opensc-pkcs11.so
openssl dgst -engine pkcs11 -sign slot_0-id_1 -keyform engine -sha256 -out signature.bin textToSign.txt
 

Проблема в том, что движок отсутствует для использования в dgst — команде.
Возможно ли запустить openssl-сессию в скрипте и выполнить эти две команды?

Ответ №1:

Вы можете использовать функциональность bash ‘here document’ << в своем скрипте:

 #/bin/bash
openssl << EOT
engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/opensc-pkcs11.so
dgst -engine pkcs11 -sign slot_0-id_1 -keyform engine -sha256 -out signature.bin textToSign.txt
quit
EOT
 

Комментарии:

1. К сожалению, OpenSSL 3.0 удаляет интерактивный режим, поэтому я нахожусь в поисках альтернатив: commit eca471391378139f76a7d1229b6a5a1dcc4b5603 Автор: Ричард Левитт <levitte@openssl.org > Дата: Ср. 3 июня 10:49:50 2020 0200 ПРИЛОЖЕНИЯ: Отказаться от интерактивного режима в программе ‘openssl’ Этот режим сильно не протестирован и не поддерживается, кажетсяне очень часто используется. Закрывает #4679 Закрывает #6292 Рецензент: Пол Дейл <paul.dale@oracle.com > Рецензент: Томас Мраз <tmraz@fedoraproject.org > (Объединенный из github.com/openssl/openssl/pull/12023 )