清理动态引擎的正确方法是否可以加载两次?

时间:2010-03-18 16:31:17

标签: m2crypto

我在使用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行,在?   在load_dynamic_engine中输入文件“/usr/local/lib/python2.4/site-packages/M2Crypto/Engine.py”,第98行     e.ctrl_cmd_string(“LOAD”,无)   在ctrl_cmd_string中输入文件“/usr/local/lib/python2.4/site-packages/M2Crypto/Engine.py”,第38行     引发EngineError(Err.get_error()) M2Crypto.Engine.EngineError:4002:错误:260B606D:引擎例程:DYNAMIC_LOAD:init failed:eng_dyn.c:521:

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

谢谢!

2 个答案:

答案 0 :(得分:0)

M2Crypto确实在svn trunk版本中提供了ENGINE_finish和ENGINE_free。 Engine类包含initfinish方法,当实例被删除时,它将为free'd。你可以尝试一下吗?如果您发现任何问题,仍有时间为下一个版本修复它们。

答案 1 :(得分: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代码有问题的建议?