Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Здравствуйте!

Установил rtengine 1.4.2 как сказано в инструкции: https://dev.rutoken.ru/pages/viewpage.a … d=89096210
Версия OpenSSL  = 1.1.1f
Конфигурационный файл openssl.cnf:

openssl_conf = openssl_def
---***---
[openssl_def]
engines = engine_section

[engine_section]
rtengine = gost_section

[gost_section]
#engine_id = rtengine
dynamic_path = /usr/lib/x86_64-linux-gnu/librtengine.so
pkcs11_path = /usr/lib/librtpkcs11ecp.so
rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=048883ad0cce9ce51ea7206c8f7d629a6bfdeb22
default_algorithms = CIPHERS, DIGEST, PKEY
enable_rand = yes

Пробую создать подпись:

openssl dgst -keyform engine -sign "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=048883ad0cce9ce51ea7206c8f7d629a6bfdeb22" -engine rtengine -out signature.txt text.txt

меня спрашивает PIN-code, я ввожу: 12345678, на что получаю ошибку:

~/xml/folder_xml$ openssl dgst -keyform engine -sign "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=048883ad0cce9ce51ea7206c8f7d629a6bfdeb22" -engine rtengine -out signature.txt text.txt
engine "rtengine" set.
Enter PKCS#11 token PIN:
cannot load key file from engine
140596479698240:error:81107067:lib(129):find_keypair:could not find public key:/home/jenkins/newjenkins/workspace/rtengine-build/2bbfba9d/engine/standalone/standalone.c:443:
140596479698240:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:../crypto/engine/eng_pkey.c:77:
unable to load key file

Подскажите, пожалуйста, с чем может быть связана данная ошибка?
PS: очень интересный путь в выводе ошибки: /home/jenkins/newjenkins/...

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Добрый день.
Можете прислать вывод команды pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O -l

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Добрый день!

rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=048883ad0cce9ce51ea7206c8f7d629a6bfdeb22

Здесь нужен идентификатор токена, а не объекта, например

rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;serial=2adc8d87
vanobl пишет:

Пробую создать подпись:

openssl dgst -keyform engine -sign "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=048883ad0cce9ce51ea7206c8f7d629a6bfdeb22" -engine rtengine -out signature.txt text.txt

Убедитесь, что правильно указываете url приватного ключа. Правильные url объектов показывает, например, утилита p11tool (пакет gnutls-bin):

p11tool --provider '/usr/lib/librtpkcs11ecp.so' --list-privkeys --login --set-pin 12345678
Object 0:
    URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=40636e48;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%50%6C%75%67%69%6E%33%30%30%35%32%30%32%32%31%39%34%36%31%35;object=%00;type=private
    Type: Private key
    Label: 
    Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; 
    ID: 50:6c:75:67:69:6e:33:30:30:35:32:30:32:32:31:39:34:36:31:35

Object 1:
    URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=40636e48;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%50%6C%75%67%69%6E%33%30%30%35%32%30%32%32%31%39%33%32%32%37;object=%00;type=private
    Type: Private key
    Label: 
    Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; 
    ID: 50:6c:75:67:69:6e:33:30:30:35:32:30:32:32:31:39:33:32:32:37

В полном url необходимости нет; достаточно указать model и id.

vanobl пишет:

PS: очень интересный путь в выводе ошибки: /home/jenkins/newjenkins/...

Приятно, что пользователи и партнеры позитивно относятся к современным практикам разработки, в том числе к использованию Continuous Integration.

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Здравствуйте!
Я разобрался с проблемой. Теперь всё работает отлично.
Ошибка была в не правильном указании пути к токену

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Здравствуйте. Похожая проблема.
Версия рутокена ЭЦП 3.0
Openssl пробовал двух версий 3.0 и 1.1.1

Пробую подписать

openssl dgst -keyform engine -sign pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=43757ca9;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%CA%E8%C0%DA%A2%87%9C%94%33%6F%79%06%4D%B8%92%71" -engine rtengine -out /tmp/test.sgn /tmp/test

получаю ошибку:

cannot load key file from engine
140342137233984:error:81108064:lib(129):find_object:ambiguous p11 uri:engine/standalone/standalone.c:419:
140342137233984:error:81107067:lib(129):find_keypair:could not find public key:engine/standalone/standalone.c:450:
140342137233984:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:crypto/engine/eng_pkey.c:77:
unable to load key file

на токене два приватных ключа.
p11tool по этому же uri отдает один ключ.

В чем может быть ошибка?

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

andrey_a_s, добрый день.
Возможно дело в том, что id указывается не в том формате:
id:  идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам.
Например: для ‘--id 3132’ в OpenSSL надо указывать "pkcs11:id=12".
Для удобства, можно воспользоваться онлайн-сервисом конвертации ACSII-кодов в строку. https://www.rapidtables.com/convert/num … ascii.html

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Аверченко Кирилл пишет:

andrey_a_s, добрый день.
Возможно дело в том, что id указывается не в том формате:
id:  идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам.
Например: для ‘--id 3132’ в OpenSSL надо указывать "pkcs11:id=12".
Для удобства, можно воспользоваться онлайн-сервисом конвертации ACSII-кодов в строку. https://www.rapidtables.com/convert/num … ascii.html

Попробовал конвертировать, получаю не читаемый набор символов "ÊèÀÚ¢‡œ”3oyM¸’q"
openssl отдает ошибку

402775F974710000:error:40800067:lib(129):ERR_RTENG_error:could not find public key:engine/standalone/standalone.c:450:

вывод p11tool --provider '/usr/lib/librtpkcs11ecp.so' --list-privkeys --login

Token 'Rutoken ECP <no label>' with URL 'pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=43757ca9;token=Rutoken%20ECP%20%3Cno%20label%3E' requires user PIN
Enter PIN: 
Object 0:
    URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=43757ca9;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%CA%E8%C0%DA%A2%87%9C%94%33%6F%79%06%4D%B8%92%71;object=RSA;type=private
    Type: Private key (RSA-4096)
    Label: RSA
    Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; 
    ID: ca:e8:c0:da:a2:87:9c:94:33:6f:79:06:4d:b8:92:71

Object 1:
    URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=43757ca9;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%45%EA%17%20%EC%7A%99%35%0C%DB%99%3F%83%86%72%56;object=RSA;type=private
    Type: Private key (RSA-4096)
    Label: RSA
    Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; 
    ID: 45:ea:17:20:ec:7a:99:35:0c:db:99:3f:83:86:72:56

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Попробуйте поменять id на другие командами:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --pin <ваш пин-код> --set-id <новый id, например, 3132> --id <id нужной пары> --type privkey
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --pin <ваш пин-код> --set-id <новый id, например, 3132> --id <id нужной пары> --type pubkey
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --pin <ваш пин-код> --set-id <новый id, например, 3132> --id <id нужной пары> --type cert

А потом в openssl указать id 12

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

После смены ид токенов получил ошибку

Could not read private key from org.openssl.engine:rtengine:pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=43757ca9;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%31%32
40271430D97F0000:error:408000E6:lib(129):ERR_RTENG_error:unknown key type:engine/p11/gost_key.c:52:
40271430D97F0000:error:408000F0:lib(129):ERR_RTENG_error:wrong key:engine/ec.c:53:
40271430D97F0000:error:13000080:engine routines:ENGINE_load_private_key:failed loading private key:../crypto/engine/eng_pkey.c:79:

Причина ошибки - библиотека rtengine работает только с гостовыми сертификатами , а на токенах - RSA
https://forum.rutoken.ru/post/13378/#p13378


спасибо за поддрежку.

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Добрый день.

При вводе команды на одном рабочем токене:
pkcs11-tool --module rtPKCS11ECP.dll -Ol

Using slot 0 with a present token (0x0)
Logging in to "Rutoken ECP <no label>".
WARNING: user PIN to be changed
Please enter User PIN:

Получаю пустое... точнее ничего не получаю.

Что это значит?

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Здравствуйте,xfnreg.
Пришлите, пожалуйста, скриншот окна "Панель управления Рутокен" - вкладки "Сертификаты".

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

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

Здравствуйте,xfnreg.
Пришлите, пожалуйста, скриншот окна "Панель управления Рутокен" - вкладки "Сертификаты".

https://forum.rutoken.ru/uploads/images/2024/09/7db75d3b604924271f0a1cd5b43a4d06.jpg

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

xfnreg,
У вас ключ формата КриптоПро (режим CSP).  Работа с такими ключами возможна только через КриптоПро. А pkcs11-tool ожидают неизвлекаемые ключи формата PKCS#11.

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

Как подписать запрос на сертификат сертификатом на токене?

Команда:
openssl x509 -req -in client1.csr -CA primerov_gost.crt -keyform engine -CAkey "pkcs11:id=3230" -engine rtengine -CAcreateserial -out client1.crt -days 365

выдаёт ошибку:

engine "rtengine" set.
Signature ok
subject=C = RU, ST = MSK, O =org , OU = IT, CN = client1
Getting CA Private Key
Can't open pkcs11:id=3230 for reading, No error
32756:error:02001002:system library:fopen:No such file or directory:crypto\bio\bss_file.c:69:fopen('pkcs11:id=3230','r')
32756:error:2006D080:BIO routines:BIO_new_file:no such file:crypto\bio\bss_file.c:76:
unable to load CA Private Key

Re: Рутокен ЭЦП 2.0 + OpenSSL + rtengine

xfnreg, добрый день. Попробуйте указать дополнительную опцию -CAkeyform engine. С openssl-1.1.1f как будто должно работать: https://github.com/openssl/openssl/issues/4366