Как создать подписанную структуру PKCS7 с помощью openssl или любой другой библиотеки с подписью на смарт-карте?

Мне нужно создать PKS7 подписанную структуру данных с подписью на смарт-карте. Это почти то, что делает функция openssl PKCS7_sign, кроме подписи. Может быть, кто-нибудь может что-то посоветовать по этому вопросу, например, как это сделать с помощью openssl или любой другой кроссплатформенной библиотеки c / c ++.
Что касается openssl, кажется, что флаги PKCS7_PARTIAL или PKCS7_STREAM функции PKCS7_sign могут быть полезны. Если я использую любой из этих флагов, я могу получить почти полную структуру PKCS7. В этом случае структура заполнена, за исключением того, что она не содержит «данные» и «знак». Так что мне нужно только добавить эти элементы. Но я не нашел способ сделать это. Кто-нибудь знает?

4

Решение

Как правило, вы не хотите (или технически заблокированы) извлекать закрытый ключ из смарт-карты. Так как это своего рода точка зрения смарт-карты — бит крипто-памяти и защищенного процессора, который никогда не разглашает ваш закрытый ключ.

Поэтому вместо этого вам нужно попросить чип-карту сделать подпись за вас.

OpenSSL может сделать это, но ему нужно знать, как разговаривать с чип-картой. Обычно это делается с помощью «двигателя». Чаще всего для этого используется pkcs # 11 из # 15 — в сочетании с драйвером чип-карты (считывателя) производителя.

Затем вам обычно нужно получить идентификаторы слота и ключа:

# Extracting slot, auth ids and key id's for later use/reference
#
set `pkcs11-tool --module /usr/lib/opensc-pkcs11.so --list-slots | grep Slot | grep SCM`
SLOT=$2
set `pkcs15-tool --list-keys | grep ID`
AID=$4
KID=$7

После чего вы можете делать «вещи» на карте:

/usr/bin/openssl << EOM
engine dynamic -pre SO_PATH:/Library/OpenSC/lib/engines/engine_pkcs11.so  -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so
XXX -engine pkcs11 -b-key slot_$SLOT-id_$KID -keyform engine  ....
EOM

Одной из таких вещей может быть подписание pkcs7. Из кода — в значительной степени сделать то же самое. Я обычно использую вспомогательный инструмент app / util из openssl, это каталог apps, чтобы сделать жизнь немного проще.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]