Не могу подписать сертификат с помощью OpenSSL

Скрипт:

cat > engine.conf <<EOF
openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib64/engines-1.1/pkcs11.so
MODULE_PATH = /opt/aktivco/rutokenecp/x86_64/librtpkcs11ecp.so
# PIN = 12345678
init = 0

EOF

export OPENSSL_CONF=engine.conf
openssl x509 \
    -engine pkcs11 \
    -req \
    -in server.csr \
    -CAkeyform ENGINE \
    -CAkey 'pkcs11:model=Rutoken%20ECP' \
    -CA fl.crt.pem \
    -out server.crt \
    -days 5000

пишет:

engine "pkcs11" set.
Signature ok
subject=CN = test
Getting CA Private Key
Enter PKCS#11 token PIN for Rutoken ECP <no label>:
Error obtaining CA X509 public key
139863667255104:error:0609E09C:digital envelope routines:pkey_set_type:unsupported algorithm:crypto/evp/p_lib.c:210:
139863667255104:error:0B09406F:x509 certificate routines:x509_pubkey_decode:unsupported algorithm:crypto/x509/x_pubkey.c:114:

У меня используется Рутокен ЭЦП 2.0 на котором записан сертификат с неизвлекаемым приватным ключом.


fl.cert.pem:

-----BEGIN CERTIFICATE-----
MIIJOjCCCOegAwIBAgIRAtiFXgAFrBuZRd5f/nhsSfowCgYIKoUDBwEBAwIwggHo
MRswGQYJKoZIhvcNAQkBFgxjYUBzZXJ0dW0ucnUxGDAWBgUqhQNkARINMTExNjY3
MzAwODUzOTEaMBgGCCqFAwOBAwEBEgwwMDY2NzMyNDAzMjgxCzAJBgNVBAYTAlJV
MTMwMQYDVQQIDCo2NiDQodCy0LXRgNC00LvQvtCy0YHQutCw0Y8g0L7QsdC70LDR
gdGC0YwxITAfBgNVBAcMGNCV0LrQsNGC0LXRgNC40L3QsdGD0YDQszFSMFAGA1UE
CQxJ0YPQu9C40YbQsCDQo9C70YzRj9C90L7QstGB0LrQsNGPLCDQtC4gMTMsINC7
0LjRgtC10YAg0JAsINC+0YTQuNGBIDIwOSDQkTFsMGoGA1UECgxj0J7QsdGJ0LXR
gdGC0LLQviDRgSDQvtCz0YDQsNC90LjRh9C10L3QvdC+0Lkg0L7RgtCy0LXRgtGB
0YLQstC10L3QvdC+0YHRgtGM0Y4gItCh0LXRgNGC0YPQvC3Qn9GA0L4iMWwwagYD
VQQDDGPQntCx0YnQtdGB0YLQstC+INGBINC+0LPRgNCw0L3QuNGH0LXQvdC90L7Q
uSDQvtGC0LLQtdGC0YHRgtCy0LXQvdC90L7RgdGC0YzRjiAi0KHQtdGA0YLRg9C8
LdCf0YDQviIwHhcNMjAwNzI3MDUzOTA5WhcNMjEwNjE5MTUyODUyWjCB9TEaMBgG
BSqFA2QFEg8zMjA2NjU4MDAwODMyMzMxIzAhBgkqhkiG9w0BCQEWFHNvY2tldHBh
aXJAZ21haWwuY29tMRowGAYIKoUDA4EDAQESDDY2NzAwMDE2MzgwNjEWMBQGBSqF
A2QDEgsxMTM4MDM5OTE0MzEmMCQGA1UEKgwd0JzQsNGA0Log0JzQuNGF0LDQudC7
0L7QstC40YcxGzAZBgNVBAQMEtCa0L7RgNC10L3QsdC10YDQszE5MDcGA1UEAwww
0JrQvtGA0LXQvdCx0LXRgNCzINCc0LDRgNC6INCc0LjRhdCw0LnQu9C+0LLQuNGH
MGYwHwYIKoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIDQwAEQOuTSiSD88SM
DeRt5gdVnWQtXTM/DNWv/uThZc3OkafAkhj9QCcGBt2UC+qj5ombX9qAagqaXxb4
H3mucm/v6TijggVTMIIFTzAOBgNVHQ8BAf8EBAMCBPAwHwYDVR0RBBgwFoEUc29j
a2V0cGFpckBnbWFpbC5jb20wEwYDVR0gBAwwCjAIBgYqhQNkcQEwQgYDVR0lBDsw
OQYIKwYBBQUHAwIGByqFAwICIgYGCCsGAQUFBwMEBgcqhQMDgTkBBggqhQMDBQoC
DAYHKoUDAwcIATCCARAGCCsGAQUFBwEBBIIBAjCB/zA3BggrBgEFBQcwAYYraHR0
cDovL3BraS5zZXJ0dW0tcHJvLnJ1L29jc3BxMjAxMi9vY3NwLnNyZjA4BggrBgEF
BQcwAYYsaHR0cDovL3BraTIuc2VydHVtLXByby5ydS9vY3NwcTIwMTIvb2NzcC5z
cmYwRgYIKwYBBQUHMAKGOmh0dHA6Ly9jYS5zZXJ0dW0tcHJvLnJ1L2NlcnRpZmlj
YXRlcy9zZXJ0dW0tcHJvLXEtMjAyMC5jcnQwQgYIKwYBBQUHMAKGNmh0dHA6Ly9j
YS5zZXJ0dW0ucnUvY2VydGlmaWNhdGVzL3NlcnR1bS1wcm8tcS0yMDIwLmNydDAr
BgNVHRAEJDAigA8yMDIwMDcyNzA1MzkwOVqBDzIwMjEwNjE5MTUyODUyWjCCATMG
BSqFA2RwBIIBKDCCASQMKyLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA
0YHQuNGPIDQuMCkMUyLQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQ
vdGC0YAgItCa0YDQuNC/0YLQvtCf0YDQviDQo9CmIiDQstC10YDRgdC40LggMi4w
DE/QodC10YDRgtC40YTQuNC60LDRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g
4oSWINCh0KQvMTI0LTMzODAg0L7RgiAxMS4wNS4yMDE4DE/QodC10YDRgtC40YTQ
uNC60LDRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQvMTI4LTM1
OTIg0L7RgiAxNy4xMC4yMDE4ME8GBSqFA2RvBEYMRNCQ0L/Qv9Cw0YDQsNGC0L3Q
vtC1INCh0JrQl9CYIEphQ2FydGEg0JPQntCh0KIv0KDRg9GC0L7QutC10L0g0K3Q
ptCfMHcGA1UdHwRwMG4wN6A1oDOGMWh0dHA6Ly9jYS5zZXJ0dW0tcHJvLnJ1L2Nk
cC9zZXJ0dW0tcHJvLXEtMjAyMC5jcmwwM6AxoC+GLWh0dHA6Ly9jYS5zZXJ0dW0u
cnUvY2RwL3NlcnR1bS1wcm8tcS0yMDIwLmNybDCCAWAGA1UdIwSCAVcwggFTgBQ7
G3dFLcZyfqJyNnHGWKo3GtJ9baGCASykggEoMIIBJDEeMBwGCSqGSIb3DQEJARYP
ZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB
0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQvtGB0LrQstCwMS4wLAYDVQQJDCXRg9C7
0LjRhtCwINCi0LLQtdGA0YHQutCw0Y8sINC00L7QvCA3MSwwKgYDVQQKDCPQnNC4
0L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDEYMBYGBSqFA2QBEg0xMDQ3
NzAyMDI2NzAxMRowGAYIKoUDA4EDAQESDDAwNzcxMDQ3NDM3NTEsMCoGA1UEAwwj
0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40LiCCwD3zYtIAAAAAAQn
MB0GA1UdDgQWBBT6OGI89x4Ic6fQ6b3Va2MSvxBPJDAKBggqhQMHAQEDAgNBAPGm
dIm4YO91kLyKdPUpW3P3gz0AaQXvBMItURGJUY1fi6oRx8YDMB+HL8mvP9TxYlXG
hOe2CcbLusAXCzZDyQk=
-----END CERTIFICATE-----

Re: Не могу подписать сертификат с помощью OpenSSL

Энжин из OpenSC -/usr/lib64/engines-1.1/pkcs11.so - не умеет работать с ГОСТ-алгоритмами.

Используйте rtengine - https://dev.rutoken.ru/pages/viewpage.a … d=43450389

Re: Не могу подписать сертификат с помощью OpenSSL

Спасибо, почитаю и разберусь.

А через Крипто-ПРО такую подпись можно осуществить ? думаю, да. Буду благодарен если подскажете как. Предположу что нужно чтобы все компоненты (сама команда опенссл и энджин) были  из набора КриптоПРО. Верно ?

(2020-07-28 16:39:07 отредактировано socketpair)

Re: Не могу подписать сертификат с помощью OpenSSL

окей, подключил rtengine. теперь такое:


$ openssl x509 \
    -engine pkcs11 \
    -req \
    -in server.csr \
    -CAkeyform ENGINE \
    -CAkey 'pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP' \
    -CA fl.crt.pem \
    -out server.crt \
    -days 5000
engine "pkcs11" set.
Signature ok
subject=CN = test
Getting CA Private Key
Specified object not found
Specified object not found
PKCS11_get_private_key returned NULL
cannot load CA Private Key from engine
140463183075136:error:80067065:pkcs11 engine:ctx_load_privkey:object not found:eng_back.c:975:
140463183075136:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:crypto/engine/eng_pkey.c:77:
unable to load CA Private Key

Раньше хоть пин-код спрашивало. Теперь даже не спрашивает... :(

Re: Не могу подписать сертификат с помощью OpenSSL

может вот это? https://forum.rutoken.ru/topic/3219/ у меня ключи тоже неизвлекаемые и созданы с помощью Крипто-ПРО (через браузерный плагин СКБ-Контура)

Re: Не могу подписать сертификат с помощью OpenSSL

А через Крипто-ПРО такую подпись можно осуществить ? думаю, да. Буду благодарен если подскажете как. Предположу что нужно чтобы все компоненты (сама команда опенссл и энджин) были  из набора КриптоПРО. Верно ?

Верно, точнее описано в их документации.  Мы не уверены, что с помощью их энжина получится работать с неизвлекаемыми ключами.

Раньше хоть пин-код спрашивало. Теперь даже не спрашивает... :(

Вы снова указываете вместо rtengine - энжин из OpenSC