TLS с помощью RSA ключа на Рутокен ЭЦП

Добрый день, подскажите, пожалуйста, есть ли пример установки tls соединения с помощью RSA ключа на Рутокен ЭЦП 2.0\3.0? В первую очередь интересуют примеры работы c openssl\cURL (с подгрузкой соответствующего engine в openssl).

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Добрый день.
С работой RSA  вы можете ознакомиться по ссылке: https://dev.rutoken.ru/pages/viewpage.a … =132777032

С работай TLS вы можете ознакомиться внизу инструкции, которая доступна по ссылке: https://dev.rutoken.ru/pages/viewpage.a … d=43450394

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Еще, если речь идет о Windows и нужным образом сгенерирован ключ на токене, что там очень просто можно использовать RSA-ключ (клиентскую аутентификацию) с токена в CURL и Git.

Curl

curl, основанный на использовании schannel (из состава Git для Windows) или штатный curl из Windows можно запустить в такой форме:

curl --cert CurrentUser\My\<отпечаток сертификата> https://.../...

Git

Вариант 1

в файле .git/config проекта (или в глобальном/системном файле конфигурации) использование сертификатов, доступных через сертификаты Windows можно обеспечить добавив параметры:

[http]
    sslBackend = schannel
    sslCert = CurrentUser\\My\\<отпечаток сертификата>

Если сертификат загружен в хранилище Local Machine, то подойдет строка sslCert в такой форме:

    sslCert = LocalMachine\\My\\<отпечаток сертификата>

Вариант 2

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

git -c http.sslBackend=schannel -c http.sslCert=CurrentUser\My\<отпечаток сертификата> clone https://.../...

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Добрый день. Вопросы рядом с данной темой. Как работать с рутокеном через OpenSSL в Windows? В линукс проблемы ниже не встречались.
И верно ли, что модуль интеграции (rtengine) не годится для RSA ключей и сертификатов?
Для RSA ключей на рутокене нужно собирать библиотеку libp11 в том числе для windows?

Делаю по инструкции "Установка и настройка OpenSSL для работы с rtengine 1.4.0 и новее"
В C:\test\openssl_1.1 положил:
- файлы из rutoken-sdk-latest.zip\sdk\openssl\bin\1.1\openssl-tool-1.1\windows-x86_64
- rtengine-1.6.0.zip\rtengine\1.6.0\Windows\x64\lib\rtengine.dll из https://www.rutoken.ru/support/download … ine-1.html
- openssl.cnf с содержимым:

openssl_conf = openssl_init

[openssl_init]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section
     
[pkcs11_section]
engine_id = pkcs11
dynamic_path = C:\test\openssl_1.1\rtengine.dll
MODULE_PATH = c:\windows\system32\rtpkcs11ecp.dll
default_algorithms = ALL

c:\test\openssl_1.1>set OPENSSL_CONF=C:\test\openssl_1.1\openssl.cnf

По https://dev.rutoken.ru/pages/viewpage.a … =132777032

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:C:\test\openssl_1.1\rtengine.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:c:\windows\system32\rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:C:\test\openssl_1.1\rtengine.dll
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Failure]: LOAD
tengine.dll)5078067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(C:    estopenssl_1.1
4220:error:25070067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:162:
4220:error:260B6084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:434:
tengine.dll260BC066:engine routines:int_engine_configure:engine configuration error:crypto\engine\eng_cnf.c:141:section=pkcs11_section, name=dynamic_path, value=C:     estopenssl_1.1
4220:error:0E07606D:configuration file routines:module_run:module initialization error:crypto\conf\conf_mod.c:177:module=engines, value=engine_section, retcode=-1

Результат тот же, если указать "MODULE_PATH:rtpkcs11ecp.dll".

c:\test\openssl_1.1>.\openssl.exe version -a
OpenSSL 1.1.1q  5 Jul 2022
built on: Fri Aug  5 12:54:11 2022 UTC
platform: VC-WIN64A
options:  bn(64,64) rc4(int) des(long) idea(int) blowfish(ptr)
compiler: cl /Gs0 /GF /Gy /MT /W3 /wd4090 /nologo /O2 -DL_ENDIAN -DOPENSSL_PIC -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_WINDOWS=0x0601
OPENSSLDIR: "C:\Program Files\Common Files\SSL"
ENGINESDIR: "C:\j\workspace\openssl-build\187ce551\out\lib\engines-1_1"
Seeding source: os-specific

Аналогично не завелось с openssl 3.0
В C:\test\openssl-3.0 положил:
- файлы из rutoken-sdk-latest.zip\sdk\openssl\bin\3.0\openssl-tool-3.0\windows-x86_64
- rtengine-3.3.0.zip\rtengine\3.3.0\Windows\x64\lib\rtengine.dll из https://www.rutoken.ru/support/download … ine-3.html
- openssl.cnf с содержимым:

openssl_conf = openssl_init

[openssl_init]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section
     
[pkcs11_section]
engine_id = pkcs11
dynamic_path = C:\test\openssl-3.0\rtengine.dll
pkcs11_path = c:\windows\system32\rtpkcs11ecp.dll
MODULE_PATH = c:\windows\system32\rtpkcs11ecp.dll
default_algorithms = ALL 

c:\test\openssl-3.0>set OPENSSL_CONF=C:\test\openssl-3.0\openssl.cnf

c:\test\openssl-3.0>.\openssl.exe engine dynamic -pre SO_PATH:C:\test\openssl-3.0\rtengine.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:c:\windows\system32\rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:C:\test\openssl-3.0\rtengine.dll
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Failure]: LOAD
8C2D0000:error:408000EE:lib(129):ERR_XTENG_error:reason(238):../../../engine/engine.c:619:
8C2D0000:error:1300006D:engine routines:dynamic_load:init failed:crypto\engine\eng_dyn.c:514:
[Failure]: MODULE_PATH:c:\windows\system32\rtpkcs11ecp.dll
8C2D0000:error:13000089:engine routines:int_ctrl_helper:invalid cmd name:crypto\engine\eng_ctrl.c:90:
8C2D0000:error:13000089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto\engine\eng_ctrl.c:258:

c:\test\openssl-3.0>.\openssl req -engine pkcs11 -x509 -new -key 0:3132 -keyform engine -out .\client.cer -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com"
Invalid engine "pkcs11"
941C0000:error:12800067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(C:\j\workspace\openssl-build\187ce551\out\lib\engines-3\pkcs11.dll)
941C0000:error:12800067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:152:
941C0000:error:13000084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:442:
941C0000:error:13000074:engine routines:ENGINE_by_id:no such engine:crypto\engine\eng_list.c:430:id=pkcs11
941C0000:error:12800067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(pkcs11.dll)
941C0000:error:12800067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:152:
941C0000:error:13000084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:442:
No engine specified for loading private key
No filename or uri specified for loading private key

c:\test\openssl-3.0>echo %OPENSSL_CONF%
C:\test\openssl-3.0\openssl.cnf

c:\test\openssl-3.0>.\openssl.exe version -a
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
built on: Wed Sep 27 14:37:26 2023 UTC
platform: VC-WIN64A
options:  bn(64,64)
compiler: cl  /Gs0 /GF /Gy /MT /W3 /wd4090 /nologo /O2 -DL_ENDIAN -DOPENSSL_PIC -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_WINDOWS=0x0601
OPENSSLDIR: "C:\Program Files\Common Files\SSL"
ENGINESDIR: "C:\j\workspace\openssl-build\187ce551\out\lib\engines-3"
MODULESDIR: "C:\j\workspace\openssl-build\187ce551\out\lib\ossl-modules"
Seeding source: os-specific
CPUINFO: N/A

c:\test\openssl-3.0>.\openssl req -engine rtengine -x509 -new -key 0:3132 -keyform engine -out .\client.cer -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com"
Engine "rtengine" set.
Could not open file or uri for loading private key from org.openssl.engine:rtengine:0:3132
C81E0000:error:16000069:STORE routines:ossl_store_get0_loader_int:unregistered scheme:crypto\store\store_register.c:237:scheme=file
C81E0000:error:80000002:system library:file_open:No such file or directory:providers\implementations\storemgmt\file_store.c:267:calling stat(org.openssl.engine:rtengine:0:3132)
C81E0000:error:12800067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(C:\j\workspace\openssl-build\187ce551\out\lib\engines-3\rtengine.dll)
C81E0000:error:12800067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:152:
C81E0000:error:13000084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:442:
C81E0000:error:13000074:engine routines:ENGINE_by_id:no such engine:crypto\engine\eng_list.c:430:id=rtengine

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Здравствуйте, Ахат, Engine из SDK не умеет работать с RSA-ключами. Вам необходимо скачать с сайта новую версию.

pkcs11_path = /path/to/librtpkcs11ecp.so

а не MODULE_PATH

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Филиппов Никита пишет:

Здравствуйте, Ахат, Engine из SDK не умеет работать с RSA-ключами. Вам необходимо скачать с сайта новую версию.

pkcs11_path = /path/to/librtpkcs11ecp.so

а не MODULE_PATH

Добрый день. Ваш Engine брал не из SDK:

Ахат пишет:

rtengine-1.6.0.zip\rtengine\1.6.0\Windows\x64\lib\rtengine.dll из https://www.rutoken.ru/support/download … ine-1.html

Ахат пишет:

rtengine-3.3.0.zip\rtengine\3.3.0\Windows\x64\lib\rtengine.dll из https://www.rutoken.ru/support/download … ine-3.html

Где-то есть новее?

MODULE_PATH указан в:
https://forum.rutoken.ru/uploads/images/2024/09/603de9bd3f64308a80cc3598ef63d26a.png
https://forum.rutoken.ru/uploads/images/2024/09/8e613a8dfa398a03f4b69fe6efb0a127.png

В C:\test\openssl_1.1\openssl.cnf заменил MODULE_PATH на pkcs11_path, а также заменил в командной строке:

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:C:\test\openssl_1.1\rtengine.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre pkcs11_path:c:\windows\system32\rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:C:\test\openssl_1.1\rtengine.dll
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Failure]: LOAD
tengine.dll)5078067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(C:    estopenssl_1.1
8688:error:25070067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:162:
8688:error:260B6084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:434:
tengine.dll260BC066:engine routines:int_engine_configure:engine configuration error:crypto\engine\eng_cnf.c:141:section=pkcs11_section, name=dynamic_path, value=C:     estopenssl_1.1
8688:error:0E07606D:configuration file routines:module_run:module initialization error:crypto\conf\conf_mod.c:177:module=engines, value=engine_section, retcode=-1

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:C:\test\openssl_1.1\rtengine.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre PKCS11_PATH:c:\windows\system32\rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:C:\test\openssl_1.1\rtengine.dll
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Failure]: LOAD
tengine.dll)25078067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(C:   estopenssl_1.1
12820:error:25070067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:162:
12820:error:260B6084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:434:
tengine.dll:260BC066:engine routines:int_engine_configure:engine configuration error:crypto\engine\eng_cnf.c:141:section=pkcs11_section, name=dynamic_path, value=C:    estopenssl_1.1
12820:error:0E07606D:configuration file routines:module_run:module initialization error:crypto\conf\conf_mod.c:177:module=engines, value=engine_section, retcode=-1

Поменял слеши:

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:C:/test/openssl_1.1/rtengine.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre PKCS11_PATH:c:/windows/system32/rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:C:/test/openssl_1.1/rtengine.dll
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Failure]: LOAD
940:error:260AC089:engine routines:int_ctrl_helper:invalid cmd name:crypto\engine\eng_ctrl.c:87:
940:error:260AB089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto\engine\eng_ctrl.c:255:
940:error:260BC066:engine routines:int_engine_configure:engine configuration error:crypto\engine\eng_cnf.c:141:section=pkcs11_section, name=MODULE_PATH, value=rtpkcs11ecp.dll
940:error:0E07606D:configuration file routines:module_run:module initialization error:crypto\conf\conf_mod.c:177:module=engines, value=engine_section, retcode=-1
940:error:260B606D:engine routines:dynamic_load:init failed:crypto\engine\eng_dyn.c:507:
[Failure]: PKCS11_PATH:c:/windows/system32/rtpkcs11ecp.dll
940:error:260AC089:engine routines:int_ctrl_helper:invalid cmd name:crypto\engine\eng_ctrl.c:87:
940:error:260AB089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto\engine\eng_ctrl.c:255:

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:C:/test/openssl_1.1/rtengine.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre PKCS11_PATH:rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:C:/test/openssl_1.1/rtengine.dll
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Failure]: LOAD
7184:error:260AC089:engine routines:int_ctrl_helper:invalid cmd name:crypto\engine\eng_ctrl.c:87:
7184:error:260AB089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto\engine\eng_ctrl.c:255:
7184:error:260BC066:engine routines:int_engine_configure:engine configuration error:crypto\engine\eng_cnf.c:141:section=pkcs11_section, name=MODULE_PATH, value=rtpkcs11ecp.dll
7184:error:0E07606D:configuration file routines:module_run:module initialization error:crypto\conf\conf_mod.c:177:module=engines, value=engine_section, retcode=-1
7184:error:260B606D:engine routines:dynamic_load:init failed:crypto\engine\eng_dyn.c:507:
[Failure]: PKCS11_PATH:rtpkcs11ecp.dll
7184:error:260AC089:engine routines:int_ctrl_helper:invalid cmd name:crypto\engine\eng_ctrl.c:87:
7184:error:260AB089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto\engine\eng_ctrl.c:255:

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Ахат, прикладываю документацию как работать с библиотекой libpkcs11 в качестве engine.
Для работы с rtengine необходимо использовать названия переменных как указано в  статье

Судя по вашим сообщениям, у вас в openssl.cnf осталось упоминание MODULE_PATH. Наш engine выдает в этом случае ошибку.

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Филиппов Никита пишет:

Ахат, прикладываю документацию как работать с библиотекой libpkcs11 в качестве engine.
Для работы с rtengine необходимо использовать названия переменных как указано в  статье

Судя по вашим сообщениям, у вас в openssl.cnf осталось упоминание MODULE_PATH. Наш engine выдает в этом случае ошибку.

C:\test\openssl_1.1\openssl.cnf

openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
rtengine = gost_section

[gost_section]
dynamic_path = c:/test/openssl_1.1/rtengine.dll
pkcs11_path = c:/windows/system32/rtpkcs11ecp.dll
rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP
default_algorithms = CIPHERS, DIGEST, PKEY
enable_rand = yes

Вы сами можете повторить?

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:c:/test/openssl_1.1/rtengine.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre pkcs11_path:rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:c:/test/openssl_1.1/rtengine.dll
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Failure]: LOAD
9620:error:260B606D:engine routines:dynamic_load:init failed:crypto\engine\eng_dyn.c:507:
[Failure]: pkcs11_path:rtpkcs11ecp.dll
9620:error:260AC089:engine routines:int_ctrl_helper:invalid cmd name:crypto\engine\eng_ctrl.c:87:
9620:error:260AB089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto\engine\eng_ctrl.c:255:

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:c:/test/openssl_1.1/rtengine.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre pkcs11_path:c:/windows/system32/rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:c:/test/openssl_1.1/rtengine.dll
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Failure]: LOAD
10084:error:260B606D:engine routines:dynamic_load:init failed:crypto\engine\eng_dyn.c:507:
[Failure]: pkcs11_path:c:/windows/system32/rtpkcs11ecp.dll
10084:error:260AC089:engine routines:int_ctrl_helper:invalid cmd name:crypto\engine\eng_ctrl.c:87:
10084:error:260AB089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto\engine\eng_ctrl.c:255:

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Ахат, Необходимо указывать имя rtengine и в ID:rtengine.
Документация по этим опциям.

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Филиппов Никита пишет:

Ахат, Необходимо указывать имя rtengine и в ID:rtengine.
Документация по этим опциям.

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:c:/test/openssl_1.1/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:/test/openssl_1.1/rtengine.dll
[Success]: ID:rtengine
[Success]: LIST_ADD:1
[Failure]: LOAD
13088:error:260B606D:engine routines:dynamic_load:init failed:crypto\engine\eng_dyn.c:507:
[Failure]: pkcs11_path:rtpkcs11ecp.dll
13088:error:260AC089:engine routines:int_ctrl_helper:invalid cmd name:crypto\engine\eng_ctrl.c:87:
13088:error:260AB089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto\engine\eng_ctrl.c:255:

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:c:/test/openssl_1.1/rtengine.dll -pre ID:rtengine -pre LIST_ADD:1 -pre LOAD -pre pkcs11_path:c:/windows/system32/rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:c:/test/openssl_1.1/rtengine.dll
[Success]: ID:rtengine
[Success]: LIST_ADD:1
[Failure]: LOAD
9436:error:260B606D:engine routines:dynamic_load:init failed:crypto\engine\eng_dyn.c:507:
[Failure]: pkcs11_path:c:/windows/system32/rtpkcs11ecp.dll
9436:error:260AC089:engine routines:int_ctrl_helper:invalid cmd name:crypto\engine\eng_ctrl.c:87:
9436:error:260AB089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto\engine\eng_ctrl.c:255:

c:\test\openssl_1.1>type %OPENSSL_CONF%
openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
rtengine = gost_section

[gost_section]
dynamic_path = c:/test/openssl_1.1/rtengine.dll
pkcs11_path = c:/windows/system32/rtpkcs11ecp.dll
rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP
default_algorithms = CIPHERS, DIGEST, PKEY
enable_rand = yes

А также pkcs11-tool дает ошибку:

C:\distr\OpenSC Project\OpenSC\tools>.\pkcs11-tool.exe --module c:\windows\system32\rtpkcs11ecp.dll --list-slots
Auto configuration failed
8668:error:25078067:DSO support routines:WIN32_LOAD:could not load the shared library:.\crypto\dso\dso_win32.c:172:filename(c:/test/openssl_1.1/rtengine.dll)
8668:error:25070067:DSO support routines:DSO_load:could not load the shared library:.\crypto\dso\dso_lib.c:244:
8668:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:.\crypto\engine\eng_dyn.c:450:
8668:error:0E07606D:configuration file routines:MODULE_RUN:module initialization error:.\crypto\conf\conf_mod.c:235:module=engines, value=engine_section, retcode=-1

C:\distr\OpenSC Project\OpenSC\tools>dir c:\test\openssl_1.1
...
 Содержимое папки c:\test\openssl_1.1

16.09.2024  14:44    <DIR>          .
16.09.2024  14:44    <DIR>          ..
29.11.2023  10:05         2 266 248 libcrypto-1_1-x64.dll
29.11.2023  10:05           636 040 libssl-1_1-x64.dll
16.09.2024  14:57               366 openssl.cnf
16.09.2024  14:39             2 209 openssl.cnf.old
29.11.2023  10:05           731 272 openssl.exe
16.09.2024  14:43        17 561 090 rtengine-1.6.0.zip
16.09.2024  14:44           490 176 rtengine.dll
               7 файлов     21 687 401 байт

c:\test\openssl_1.1>dir c:\windows\system32\rtpkcs11ecp.dll
...
28.08.2024  13:31         4 732 088 rtPKCS11ECP.dll

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Поменял в конфиге слеши на обратные:

c:\test\openssl_1.1>.\openssl.exe engine dynamic -pre SO_PATH:c:\test\openssl_1.1\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:\test\openssl_1.1\rtengine.dll
[Success]: ID:rtengine
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: pkcs11_path:rtpkcs11ecp.dll
Loaded: (rtengine) Rutoken engine
tengine.dll)5078067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(c:    estopenssl_1.1
8844:error:25070067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:162:
8844:error:260B6084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:434:
tengine.dll260BC066:engine routines:int_engine_configure:engine configuration error:crypto\engine\eng_cnf.c:141:section=gost_section, name=dynamic_path, value=c:       estopenssl_1.1
8844:error:0E07606D:configuration file routines:module_run:module initialization error:crypto\conf\conf_mod.c:177:module=engines, value=engine_section, retcode=-1

c:\test\openssl_1.1>type %OPENSSL_CONF%
openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
rtengine = gost_section

[gost_section]
dynamic_path = c:\test\openssl_1.1\rtengine.dll
pkcs11_path = c:\windows\system32\rtpkcs11ecp.dll
#rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP
#default_algorithms = CIPHERS, DIGEST, PKEY
#enable_rand = yes

c:\test\openssl_1.1>"C:\distr\OpenSC Project\OpenSC\tools\pkcs11-tool.exe" --module rtpkcs11ecp.dll --list-slots
Auto configuration failed
tengine.dll)25078067:DSO support routines:WIN32_LOAD:could not load the shared library:.\crypto\dso\dso_win32.c:172:filename(c: estopenssl_1.1
13156:error:25070067:DSO support routines:DSO_load:could not load the shared library:.\crypto\dso\dso_lib.c:244:
13156:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:.\crypto\engine\eng_dyn.c:450:
13156:error:0E07606D:configuration file routines:MODULE_RUN:module initialization error:.\crypto\conf\conf_mod.c:235:module=engines, value=engine_section, retcode=-1

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Ахат, добрый день!

Среди ваших попыток загрузки engine была, как минимум, одна удачная, но она осталась незамеченной. Давайте разберемся.

Существует два метода загрузки engine в openssl-tool:
1. С использованием конфигурационного файла openssl.cnf
2. При помощи dynamic engine (https://github.com/openssl/openssl/blob … ic-engines)

Как произвести загрузку rtengine с использованием openssl.cnf

1. Указать в openssl.cnf, как минимум, следующие значения:

openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
rtengine = gost_section

[gost_section]
dynamic_path = c:\\test\\openssl_1.1\\rtengine.dll
pkcs11_path = c:\\windows\\system32\\rtpkcs11ecp.dll
# rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP
default_algorithms = CIPHERS, DIGEST, PKEY
# enable_rand = yes

* Я закомментировал опции rand_token и enable_rand, чтобы openssl-tool с rtengine мог работать и без токена. Если вам из соображений безопасности важно брать энтропию для случайных чисел с токена, так делать не стоит.

* На windows есть проблема с прямыми/обратными слешами. Рабочий вариант (проверил у себя перед рекомендацией) -- использовать по два обратных слеша.

2. Задать переменную окружения OPENSSL_CONF, указывающую на ваш файл openssl.cnf. В пределах одной консоли cmd.exe это делается командой set OPENSSL_CONF=C:\test\openssl_1.1\openssl.cnf

Как произвести загрузку rtengine с использованием dynamic engine

Загрузка осуществляется командой:

> engine dynamic -pre SO_PATH:c:\test\openssl_1.1\rtengine.dll -pre ID:rtengine -pre LIST_ADD:1 -pre LOAD -pre pkcs11_path:rtpkcs11ecp.dll

Загрузка openssl при помощи dynamic engine, пожалуй, имеет смысл только если вы используете openssl-tool как криптокалькулятор (однократно запустили openssl без параметров, и через командный интерфейс зовете доступные команды).

Загрузка rtengine обоими способами сразу (что вы продемонстрировали) не имеет логичного объяснения и на предвещает ничего хорошего.

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Евгений, благодарю за ответ.

Евгений Мироненко пишет:

Загрузка осуществляется командой:

> engine dynamic -pre SO_PATH:c:\test\openssl_1.1\rtengine.dll -pre ID:rtengine -pre LIST_ADD:1 -pre LOAD -pre pkcs11_path:rtpkcs11ecp.dll
c:\test\openssl_1.1>echo %OPENSSL_CONF%
%OPENSSL_CONF%

c:\test\openssl_1.1>.\openssl.exe
OpenSSL> engine dynamic -pre SO_PATH:c:\test\openssl_1.1\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:\test\openssl_1.1\rtengine.dll
[Success]: ID:rtengine
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: pkcs11_path:rtpkcs11ecp.dll
Loaded: (rtengine) Rutoken engine

OpenSSL> req -engine rtengine -new -key 0:3132 -keyform engine -x509 -out cert.crt -outform DER
engine "rtengine" set.
Can't open C:\Program Files\Common Files\SSL/openssl.cnf for reading, No error
11904:error:02001003:system library:fopen:No such process:crypto\bio\bss_file.c:69:fopen('C:\Program Files\Common Files\SSL/openssl.cnf','r')
11904:error:2006D080:BIO routines:BIO_new_file:no such file:crypto\bio\bss_file.c:76:
error in req

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Через конфиг заработало, но почему не принимает distinguished_name из команды:

OpenSSL> req -engine rtengine -new -key pkcs11:id=12 -keyform engine -x509 -out cert.crt -outform DER
engine "rtengine" set.
Enter PKCS#11 token PIN:
unable to find 'distinguished_name' in config
problems making Certificate Request
12996:error:0E06D06C:configuration file routines:NCONF_get_string:no value:crypto\conf\conf_lib.c:273:group=req name=distinguished_name
error in req

OpenSSL> req -engine rtengine -new -key pkcs11:id=12 -keyform engine -x509 -out cert.crt -outform DER -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com"
engine "rtengine" set.
Enter PKCS#11 token PIN:
unable to find 'distinguished_name' in config
problems making Certificate Request
12996:error:0E06D06C:configuration file routines:NCONF_get_string:no value:crypto\conf\conf_lib.c:273:group=req name=distinguished_name
error in req

(2024-09-16 19:04:21 отредактировано Евгений Мироненко)

Re: TLS с помощью RSA ключа на Рутокен ЭЦП

Вынужден вас отправить к документации на openssl: https://docs.openssl.org/master/man1/op … /#examples и к этому ответу на stackexchange: https://superuser.com/questions/947061/ … -in-config

TL/DR: для того, чтобы работала утилита req из openssl-tool, в openssl.cnf нужны дополнительные настройки.