Движок PKCS#11 не работает в openssl на centos 6

Я хочу добавить движок PKCS#11 в OpenSSL и использую CentOS 6.2. На самом деле я загружаю двигатель без проблем, как вы можете видеть ниже:

[root@localhost 05:06:18  openssl-1.0.1e]$ openssl engine -t dynamic -pre SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/local/lib/libsst.so
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/usr/local/lib/libsst.so
Loaded: (pkcs11) pkcs11 engine
    [ available ]

но когда я использую опцию OpenSSL, чтобы увидеть загруженный движок, движок pkcs11 отсутствует в списке:

[root@localhost 05:19:58  openssl-1.0.1e]$ openssl engine -v -t 
(aesni) Intel AES-NI engine (no-aesni)
     [ available ]
(dynamic) Dynamic engine loading support
     [ unavailable ]
     SO_PATH, NO_VCHECK, ID, LIST_ADD, DIR_LOAD, DIR_ADD, LOAD

и когда я хочу использовать движок, я вижу эту ошибку:

[root@localhost 05:20:04  openssl-1.0.1e]$ openssl genrsa -engine pkcs11 -out priv.key 1024
invalid engine "pkcs11"
3078776556:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(/usr/lib/openssl/engines/libpkcs11.so):   /usr/lib/openssl/engines/libpkcs11.so: cannot open shared object file: No such file or   directory
3078776556:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
3078776556:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
3078776556:error:2606A074:engine routines:ENGINE_by_id:no such engine:eng_list.c:417:id=pkcs11
3078776556:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(libpkcs11.so): libpkcs11.so: cannot open shared object file: No such file or directory
3078776556:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
3078776556:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
Generating RSA private key, 1024 bit long modulus
.......++++++
.......++++++
e is 65537 (0x10001)

Не могу понять в чем может быть проблема...


person Maryam Saeidi    schedule 24.02.2013    source источник
comment
движок pkcs11 включен по умолчанию, или вам не нужно было исправлять openssl?   -  person andrew cooke    schedule 27.02.2013


Ответы (2)


Эта проблема связана с тем, что OpenSSL загружает библиотеку только один раз и после этого не сохраняет состояние, поэтому, если мы хотим сохранить состояние, мы должны использовать следующие команды:

[root@localhost 04:58:25  home]$ openssl
OpenSSL> engine -t dynamic -pre SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/local/lib/libsst.so
 (dynamic) Dynamic engine loading support
 [Success]: SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so
 [Success]: ID:pkcs11
 [Success]: LIST_ADD:1
 [Success]: LOAD
 [Success]: MODULE_PATH:/usr/local/lib/libsst.so
 Loaded: (pkcs11) pkcs11 engine
      [ available ]
OpenSSL> engine
 (aesni) Intel AES-NI engine (no-aesni)
 (dynamic) Dynamic engine loading support
 (pkcs11) pkcs11 engine
OpenSSL> 
person Maryam Saeidi    schedule 03.03.2013
comment
Вы написали libsst.so. Возможно, вы имеете в виду написать libssl.so? - person Faheem Mitha; 17.10.2015
comment
Для статической конфигурации, которая позволила бы такой команде работать openssl genrsa -engine pkcs11 -out priv.key 1024, посмотрите использование Engine_pkcs11 с файлом конфигурации openssl в https://web.archive.org/web/20110909101027/http://www.opensc-project.org/engine_pkcs11/wiki/QuickStart - person Jaime Hablutzel; 21.02.2016

Действительно, как было сказано в одном из комментариев выше, для многократного использования удобнее включить параметры движка в соответствующий файл конфигурации OpenSSL. Для данного примера вы должны добавить строку

openssl_conf  = openssl_def

перед первым разделом (который начинается с символа '[' в начале строки) и добавьте раздел с пометкой [openssl_def] для простоты в конце файла:

[openssl_def]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section] 
engine_id = pkcs11
dynamic_path = /usr/lib/openssl/engines/engine_pkcs11.so
MODULE_PATH = /usr/local/lib/libsst.so
init = 0
# adapt as desired:  PIN = 1234 
person dvo    schedule 11.04.2016