0

我在使用 python 和 M2Crypto 将 Engine PKCS #11 作为动态引擎加载时遇到问题。我正在尝试访问 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() 

第一次运行此方法时效果很好。第二次,加载动态引擎时失败(见下面的错误)。

回溯(最后一次调用):文件“”,第 1 行,在?文件 "/usr/local/lib/python2.4/site-packages/M2Crypto/Engine.py",第 98 行,在 load_dynamic_engine e.ctrl_cmd_string("LOAD", None) 文件 "/usr/local/lib/python2. 4/site-packages/M2Crypto/Engine.py",第 38 行,在 ctrl_cmd_string 中引发 EngineError(Err.get_error()) M2Crypto.Engine.EngineError: 4002:error:260B606D:engine routines:DYNAMIC_LOAD:init failed:eng_dyn.c :521:

是否不可能在 python 会话中加载引擎两次?我错过了某种引擎清理/删除吗?OpenSSL 文档谈论 engine_finish() 但我不认为 M2Crypto 提供。有没有办法判断引擎是否已经加载?

谢谢!

4

2 回答 2

0

我的 python 代码显示得比评论部分更好。pkcs11.finish() 方法在 M2Crypto 修订版 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 代码有问题有什么建议吗?

于 2010-04-06T18:05:40.230 回答
0

M2Crypto在 svn trunk 版本中确实有 ENGINE_finish 和 ENGINE_free。该类Engine具有init, 和finish方法,当一个实例被删除时,它将被删除free。你可以试一试吗?如果您发现任何问题,仍有时间在下一个版本中修复它们。

于 2010-03-24T04:30:04.320 回答