Re: Rutoken + openssl windows

Чтобы не вводить PIN-код вручную, нужно в команде openssl в разделе pkcs11-uri добавить параметр "?pin-value=123456", где 123456 - это ваш актуальный PIN-код Рутокена.

В вашем случае, команда будет выглядеть следующим образом:
openssl cms -sign -binary -nosmimecap -in etalon.file -out signed_cms -outform PEM -keyform engine -inkey "pkcs11:model=Rutoken%20ECP?pin-value=123456" -engine rtengine -signer xn.crt

Re: Rutoken + openssl windows

Спасибо большое, все получилось.
Есть ли какая то команда клиента JS, чтобы достать полный URI для нужного токена?

проще говоря, чтобы бухгалтер на моей странице увидела перечень параметров, скопировала нужный URI и без бубна запустилась командная строка?
т.е. для сложных случаев можно будет просто запускать OpenSC - но не всем бухгалтерам это будет под силу с первого или второго раза.

Re: Rutoken + openssl windows

Готового решения у нас нет.
Могу предложить только использовать API Рутокен плагин для получения информации об устройстве.
Подробнее можно прочитать в документации:
https://plugin.api.rutoken.ru/CryptoPlu … DeviceInfo
https://plugin.api.rutoken.ru/CryptoPlu … merateKeys
https://plugin.api.rutoken.ru/CryptoPlu … getKeyInfo

Re: Rutoken + openssl windows

Добрый день.
перенес пакет на комп заказчика.
Начало выдавать ошибку invalid engine rtengine

что имеем у заказчика на машине:

Вот openssl.cnf


-----------------------------8<----------------------------
[ openssl_def ]
engines = engine_section

[ engine_section ]
rtengine = rtengine_section
gost = gost_section

[ rtengine_section ]
dynamic_path = "c:\\sign1c\\lib\\rtengine.dll"
#enable_rand = yes
#pkcs11_path = "c:\sign1c\lib\rtpkcs11ecp.dll"
pkcs11_path = "c:\\windows\\system32\\rtpkcs11ecp.dll"

#rand_token = pkcs11:model=Rutoken%20ECP
default_algorithms = ALL


[gost_section]

engine_id = gost
dynamic_path = ./gost.dll
default_algorithms = ALL

-----------------------------8<----------------------------

Вот вызов openssl с динамичным вызовом библиотек Engine, он проходит нормально

openssl.exe engine dynamic -pre SO_PATH:C:\sign1c\lib\rtengine.dll -pre ID:rtengine -pre LIST_ADD:1 -pre LOAD -pre pkcs11_path:rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:C:\sign1c\lib\rtengine.dll
[Success]: ID:rtengine
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: pkcs11_path:rtpkcs11ecp.dll
Loaded: (rtengine) Rutoken engine


но когда я делаю вызов openssl для подписи = получаю ошибку invalid engine rtengine:

https://forum.rutoken.ru/uploads/images/2025/02/0b2d1d6c03a2f987e9975eaae62a998a.png


помогите советом куда копать.

Re: Rutoken + openssl windows

Добрый день.

1. После создания/изменения конфигурационного файла openssl, вы применяли следующую команду?
(замените \path\to\openssl.cnf на путь к вашему конфигурационному файлу)

set OPENSSL_CONF=C:\path\to\openssl.cnf

Если нет, попробуйте её применить и попробовать заново ввести команду для подписи.

2. Попробуйте указать путь к конфигурационному файлу openssl перед командой для подписания (замените \path\to\openssl.cnf на путь к вашему конфигурационному файлу):

OPENSSL_CONF=C:\path\to\openssl.cnf openssl cms -sign -binary -nosmimecap -in 1.txt -out 1.res -outform PEM -keyform engine -inkey "pkcs11:model=Rutoken%20ECP?pin-value=XXXXXX" -engine rtengine -signer certfile.crt

3. Попробуйте указать путь к библиотеке rtengine в команде для подписания файла:

openssl cms -sign -binary -nosmimecap -in 1.txt -out 1.res -outform PEM -keyform engine -inkey "pkcs11:model=Rutoken%20ECP?pin-value=XXXXXX" -engine dynamic -pre SO_PATH:c:\sign1c\lib\rtengine.dll -pre ID:rtengine -pre LIST_ADD:1 -pre LOAD -pre pkcs11_path:rtpkcs11ecp.dll -signer certfile.crt

Re: Rutoken + openssl windows

Алексей Кийко пишет:

1. После создания/изменения конфигурационного файла openssl, вы применяли следующую команду?
(замените \path\to\openssl.cnf на путь к вашему конфигурационному файлу)

set OPENSSL_CONF=C:\path\to\openssl.cnf

да, применял.
Хотя это всего лишь установка переменной окружения в операционной системе.
перед запуском я проверяю ее, что она установлена

C:\sign1c>echo %OPENSSL_CONF%
с:\sign1c\openssl.cnf


Алексей Кийко пишет:

OPENSSL_CONF=C:\path\to\openssl.cnf openssl cms -sign -binary -nosmimecap -in 1.txt -out 1.res -outform PEM -keyform engine -inkey "pkcs11:model=Rutoken%20ECP?pin-value=XXXXXX" -engine rtengine -signer certfile.crt

в таком виде оно дает ошибку о неизвестной команде OPENSSL_CONF
а если добавить перед ней set - то в итоге она установит неправильно переменную окруженя, считая, что переменная окружения - весь текст после знака "="

C:\sign1c>echo %OPENSSL_CONF%
C:\sign1c\openssl.cnf openssl cms -sign -binary -nosmimecap -in 1.txt -out 1.res -outform PEM -keyform engine -inkey pkcs11:model=Rutoken%20ECP -engine rtengine -signer certfile.crt


Алексей Кийко пишет:

openssl cms -sign -binary -nosmimecap -in 1.txt -out 1.res -outform PEM -keyform engine -inkey "pkcs11:model=Rutoken%20ECP?pin-value=XXXXXX" -engine dynamic -pre SO_PATH:c:\sign1c\lib\rtengine.dll -pre ID:rtengine -pre LIST_ADD:1 -pre LOAD -pre pkcs11_path:rtpkcs11ecp.dll -signer certfile.crt

это приводит вот к такому результату

engine "dynamic" set.
cms: Unrecognized flag pre

я реально не понимаю почему оно не грузит engine, хотя динамическая загрузка работает без ошибок

Re: Rutoken + openssl windows

Добрый день!

slpodpishi пишет:

но когда я делаю вызов openssl для подписи = получаю ошибку invalid engine rtengine:

https://forum.rutoken.ru/uploads/images … 2a998a.png

помогите советом куда копать.

Чтобы исключить вероятность недопонимания и опечаток, хотелось бы попросить на таком же скриншоте показать последовательный вызов следующих команд в одном терминале cmd.exe:

set OPENSSL_CONF=C:\sign1c\openssl.cnf

echo %OPENSSL_CONF%

type %OPENSSL_CONF%

openssl engine -v

REM В этой команде нужно исправить значение XXXXXX на реальный пин-код
openssl cms -sign -binary -nosmimecap -in 1.txt -out 1.res -outform PEM -keyform engine -inkey "pkcs11:model=Rutoken%20ECP?pin-value=XXXXXX" -engine rtengine -signer certfile.crt

Re: Rutoken + openssl windows

Вы будете смеяться, но все заработало сегодня утром.
Сел делать по вашей инструкции скрины и при первом запуске оно уже показало engine set rtengine, чего я и добивался.
Как я понял, проблема была в том, что после установки всех нужных библиотек машину не перегрузили, так как это сервер 1С и организация работала, а я нахожусь от машины в паре тысяч километров.
Вчера ночью машину ребутнули сами владельцы машины и все сегодня завелось идеально.
подпись формируется и нормально работает.

Спасибо еще раз за помощь.

и уже в качестве факультатива проконсультируйте по вот такому вопросу.
Вы мне рекомендовали для диагностики пакет OpenSC - я его вставил в свой пакет, чтобы он уже был, он работает без установки в ОС, просто из папки.
с помощью утилиты OpenSC у меня получилось сделать сырую подпись.

сертификат ключа есть уже в отдельном файле.

правильно ли я понимаю, что ее можно использовать для получения нужного мне cms pkcs7 если:
1) вычислить хэш подписанных данных
2) создать атрибуты для подписи в формате ASN.1
3) создать сырую подпись для созданных атрибутов
4) вручную собрать через синтаксис ASN.1 нужный мне pkcs7


Если логика правильная - вы случайно не встречали какой-либо пакет, который поддерживает такую сборку?
ибо писать это на php я буду не быстро.

Спасибо.

Re: Rutoken + openssl windows

Добрый день!

slpodpishi пишет:

правильно ли я понимаю, что ее можно использовать для получения нужного мне cms pkcs7 если:
1) вычислить хэш подписанных данных
2) создать атрибуты для подписи в формате ASN.1
3) создать сырую подпись для созданных атрибутов
4) вручную собрать через синтаксис ASN.1 нужный мне pkcs7

Все верно.

slpodpishi пишет:

Если логика правильная - вы случайно не встречали какой-либо пакет, который поддерживает такую сборку?

Встречал:
* библиотека или утилита openssl, к которым подключен rtengine (утилита -- https://dev.rutoken.ru/pages/viewpage.a … =180715764 ; программный интерфейс можно посмотреть в SDK: https://www.rutoken.ru/support/download/get/sdk.html -- директория sdk/openssl);
* библиотека rtpkcs11ecp с функцией расширения C_EX_PKCS7Sign: https://dev.rutoken.ru/pages/viewpage.a … KCS7Sign()
* библиотека pki-core-cpp: https://dev.rutoken.ru/pages/viewpage.a … d=20119788

До тех пор, пока неясны ограничения, исключающие эти варианты, сложно порекомендовать что-то другое.