FreeBSD, Рутокен ЭЦП 3.0, OpenSSL запрос на сертификат

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

FreeBSD 13.1, Рутокен ЭЦП 3.0

pkcs11-tool токен видит, ключи добавляет/удаляет:

pkcs11-tool --module librtpkcs11ecp.so -Ol --pin '12345678'

Public Key Object; RSA 2048 bits
  label:      test_key
  ID:         01
  Usage:      encrypt, verify, wrap
  Access:     local
Private Key Object; RSA 
  label:      test_key
  ID:         01
  Usage:      decrypt, sign, unwrap
  Access:     sensitive, always sensitive, never extractable, local
Public Key Object; RSA 2048 bits
  label:      test2_1
  ID:         c022ba7a6f620778
  Usage:      encrypt, verify, wrap
  Access:     local
Private Key Object; RSA 
  label:      test2_1
  ID:         c022ba7a6f620778
  Usage:      decrypt, sign, unwrap
  Access:     sensitive, always sensitive, never extractable, local
Public Key Object; GOSTR3410-2012-256
  PARAMS OID: 06072a850302022301
  VALUE:      78ee9ed140e7f9e55e4634b7e036986b6b7d5014e5d6fc69795e4fc0950c9085
              839df0f5346da5c5044fe981103b91a1911f8ddd25d13b851b8fee86bc45b8a8
  label:      
  ID:         02
  Usage:      verify
  Access:     local
Private Key Object; GOSTR3410-2012-256
  PARAMS OID: 06072a850302022301
  label:      
  ID:         02
  Usage:      sign
  Access:     sensitive, always sensitive, never extractable, local
Certificate Object; type = X.509 cert
  label:      test2_1
  subject:    DN: CN=test2_1
  serial:     58FDC40185935F36
  ID:         c022ba7a6f620778

Но не получается создать запрос на сертификат с помощью OpenSSL
ГОСТ:

openssl req -utf8 -new -config openssl_rutoken.cnf -subj '/CN=test/' -sha256 -engine rtengine -keyform engine -key "pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=418958c3;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%02" -passin pass:"12345678"

engine "rtengine" set.
34389172224:error:8007506F:lib(128):PKEY_GOST_CTRL:invalid digest type:engine/orig/gost_pmeth.c:126:

RSA:

openssl req -utf8 -new -config openssl_rutoken.cnf -subj '/CN=test/' -sha256 -engine rtengine -keyform engine -key "pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=418958c3;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%01" -passin pass:"12345678"

engine "rtengine" set.
cannot load Private Key from engine
34389172224:error:8107D0E6:lib(129):init_algorithm_nid:unknown key type:engine/p11/gost_key.c:52:
34389172224:error:810A10F0:lib(129):rt_eng_get0_ec_key:wrong key:engine/ec.c:53:
34389172224:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:/usr/src/crypto/openssl/crypto/engine/eng_pkey.c:78:
unable to load Private Key

конфигурационный файл openssl_rutoken.cnf:

openssl_conf = openssl_def
...
[ openssl_def ]
engines = engine_section

[ engine_section ]
rtengine = gost_section

[ gost_section ]
#dynamic_path = /usr/local/lib/librtengine.so.1.5.0
pkcs11_path = /usr/local/lib/librtpkcs11ecp.so
rand_token = pkcs11:model=Rutoken%20ECP;serial=418958c3
default_algorithms = ALL
enable_rand = yes

Подскажите, пожалуйста, с чем может быть связана данная ошибка?

P.S. пробовал как системную openssl, так и из состава Рутокен SDK
P.P.S. xca, на этой же системе, сертификаты на токене нормально выпускает ( ID c022ba7a6f620778 в выводе pkcs11-tool)

Re: FreeBSD, Рутокен ЭЦП 3.0, OpenSSL запрос на сертификат

sciram, добрый день.
1. В конфиге openssl необходимо раскомментировать строку dynamic_path.
2. После этого необходимо убедиться, что rtengine загружается командой openssl engine
3. В команде создания запроса на ключе ГОСТ необходимо убрать -sha256 (Это значение хеша для RSA ключей)

Re: FreeBSD, Рутокен ЭЦП 3.0, OpenSSL запрос на сертификат

Здравствуйте!
dynamic_path раскомментировал, OPENSSL_CONF прописал

openssl engine

(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support
(rtengine) Rutoken engine

запрос на RSA сертификат:

openssl req -utf8 -new -subj '/CN=test/' -sha256 -engine rtengine -keyform engine -key "pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=418958c3;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%01" -passin pass:"12345678"
engine "rtengine" set.
cannot load Private Key from engine
34389172224:error:8107D0E6:lib(129):init_algorithm_nid:unknown key type:engine/p11/gost_key.c:52:
34389172224:error:810A10F0:lib(129):rt_eng_get0_ec_key:wrong key:engine/ec.c:53:
34389172224:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:/usr/src/crypto/openssl/crypto/engine/eng_pkey.c:78:
unable to load Private Key

После убирания -sha256  запрос на ГОСТ сертификат отработал правильно. Спасибо!

Re: FreeBSD, Рутокен ЭЦП 3.0, OpenSSL запрос на сертификат

sciram, rtengine работает только с ГОСТ ключами.
Создать запрос на сертификат через него с RSA ключом не получится.
Для работы с RSA необходимо установить пакет libengine-pkcs11-openssl или аналогичный для вашей ОС.
Пример создания самоподписанного сертификата на основе RSA ключа есть по ссылке https://dev.rutoken.ru/pages/viewpage.a … enSSL1.1.x

Re: FreeBSD, Рутокен ЭЦП 3.0, OpenSSL запрос на сертификат

К сожалению, так и не смог найти под FreeBSD аналог libengine-pkcs11-openssl, поэтому и надеялся, что rtengine поможет в связке OpenSSL-Rutoken.

Может быть будет кому-нибудь полезно:
оказывается в составе pkcs11-tool есть утилита которая умеет создавать запрос на сертификат.
На моем примере:
1.  Создаем запрос

p11req -l /usr/local/lib/librtpkcs11ecp.so -s 0 -i 'test_key' -d '/CN=Test/' -o test_key.csr

2. Подписываем

openssl ca -config ./openssl.cnf -in test_key.csr -out test_key.crt

3. Загружаем в токен

pkcs11-tool --module /usr/local/lib/librtpkcs11ecp.so --type cert -w test_key.crt --id 01 --label test_key

Профит

Public Key Object; RSA 2048 bits
  label:      test_key
  ID:         01
  Usage:      encrypt, verify, wrap
  Access:     local
Private Key Object; RSA 
  label:      test_key
  ID:         01
  Usage:      decrypt, sign, unwrap
  Access:     sensitive, always sensitive, never extractable, local
Public Key Object; RSA 2048 bits
  label:      test2_1
  ID:         c022ba7a6f620778
  Usage:      encrypt, verify, wrap
  Access:     local
Private Key Object; RSA 
  label:      test2_1
  ID:         c022ba7a6f620778
  Usage:      decrypt, sign, unwrap
  Access:     sensitive, always sensitive, never extractable, local
Public Key Object; GOSTR3410-2012-256
  PARAMS OID: 06072a850302022301
  VALUE:      78ee9ed140e7f9e55e4634b7e036986b6b7d5014e5d6fc69795e4fc0950c9085
              839df0f5346da5c5044fe981103b91a1911f8ddd25d13b851b8fee86bc45b8a8
  label:      
  ID:         02
  Usage:      verify
  Access:     local
Private Key Object; GOSTR3410-2012-256
  PARAMS OID: 06072a850302022301
  label:      
  ID:         02
  Usage:      sign
  Access:     sensitive, always sensitive, never extractable, local
Certificate Object; type = X.509 cert
  label:      test2_1
  subject:    DN: CN=test2_1
  serial:     58FDC40185935F36
  ID:         c022ba7a6f620778
Certificate Object; type = X.509 cert
  label:      test_key
  subject:    DN: CN=Test
  serial:     09
  ID:         01