Правильный способ очистки динамических двигателей и могут ли они быть загружены дважды? - PullRequest
0 голосов
/ 18 марта 2010

У меня проблемы с загрузкой движка PKCS # 11 в качестве динамического движка с использованием Python и M2Crypto. Я пытаюсь получить доступ к Aladdin USB eToken.

Вот важные шаги из моего кода на Python:

dynamic = Engine.load_dynamic_engine("pkcs11", "/usr/local/ssl/lib/engines/engine_pkcs11.so")
pkcs11 = Engine.Engine("pkcs11")
pkcs11.ctrl_cmd_string("MODULE_PATH", "/usr/lib/libeTPkcs11.so")
pkcs11.engine_init_custom()  # initialize engine with custom M2Crypto patch
# next few steps which I deleted pass password and grab key & cert off token    
Engine.cleanup() 

Это отлично работает при первом запуске этого метода. Во второй раз происходит сбой при загрузке динамического двигателя (см. Ошибку ниже).

Traceback (последний вызов был последним): Файл "", строка 1, в? Файл "/usr/local/lib/python2.4/site-packages/M2Crypto/Engine.py", строка 98, в load_dynamic_engine e.ctrl_cmd_string ("LOAD", нет) Файл "/usr/local/lib/python2.4/site-packages/M2Crypto/Engine.py", строка 38, в ctrl_cmd_string поднять EngineError (Err.get_error ()) M2Crypto.Engine.EngineError: 4002: ошибка: 260B606D: подпрограммы механизма: DYNAMIC_LOAD: сбой инициализации: eng_dyn.c: 521:

Разве нельзя загружать двигатели дважды в сеансе Python? Я пропускаю какую-то очистку / удаление двигателя? Документы OpenSSL говорят о engine_finish (), но я не думаю, что M2Crypto предлагает это. Есть ли способ узнать, загружен ли уже двигатель?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 апреля 2010

Мой код Python отображается лучше, чем в разделе комментариев. Метод pkcs11.finish () вызывает ошибку сегментации в M2Crypto revision 723.

dynamic = Engine.load_dynamic_engine("pkcs11", "/usr/local/ssl/lib/engines/engine_pkcs11.so")
pkcs11 = Engine.Engine("pkcs11")
pkcs11.ctrl_cmd_string("MODULE_PATH", "/usr/lib/libeTPkcs11.so")
pkcs11.init()
# next few steps which I deleted pass password and grab key & cert off token
pkcs11.finish()                                   
Engine.cleanup() 

У кого-нибудь есть совет, что я делаю не так или есть проблема с кодом M2Crypto?

0 голосов
/ 24 марта 2010

M2Crypto имеет ENGINE_finish и ENGINE_free, доступные в версии соединительных линий SVN. Класс Engine имеет методы init и finish, и когда экземпляр будет удален, он будет free 'd. Можете ли вы попробовать? Если вы видите какие-либо проблемы, у вас еще есть время их исправить для следующего выпуска.

...