我在使用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提供了这个。有没有方法来判断引擎是否已经加载?
谢谢!
答案 0 :(得分:0)
M2Crypto确实在svn trunk版本中提供了ENGINE_finish和ENGINE_free。 Engine
类包含init
和finish
方法,当实例被删除时,它将为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代码有问题的建议?