2010-03-18 41 views
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」,無) 文件「/ usr/local/lib /python2.4/site-packages/M2Crypto/Engine.py「,第38行,在ctrl_cmd_string中 raise EngineError(Err.get_error()) M2Crypto.Engine.EngineError:4002:error:260B606D:engine routines:DYNAMIC_LOAD:init失敗:eng_dyn.c:521:

是否無法在python會話中兩次加載引擎?我是否缺少某種引擎清理/刪除? OpenSSL文檔討論engine_finish(),但我不認爲M2Crypto提供了這個功能。有沒有方法可以判斷引擎是否已經加載?

謝謝!

+0

似乎M2Crypto需要修補以使ENGINE_finish()和ENGINE_free()可用。 – Becky

回答

0

M2Crypto在svn trunk版本中有ENGINE_finish和ENGINE_free可用。 Engine類有initfinish方法,並且當一個實例被刪除時,它將是free'd。你可以試試嗎?如果您發現任何問題,仍有時間爲下一個版本修復它們。

+0

我終於嘗試了最新的M2Crypto。我正在使用版本庫中的修訂版723。我正在使用在M2Crypto中新增的init和finish方法。完成方法會引發分段錯誤。 (我將在單獨的評論中發佈我的代碼,否則我將用盡空間) 一旦pkcs11.finish()行被命中,我的腳本就會崩潰並出現分段錯誤。當我嘗試自己修補M2Crypto並添加完成方法時,也發生了同樣的情況。 – Becky

+0

下面是我使用的代碼: 動態= 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() #我刪除通密碼和搶鑰匙和證書關令牌 pkcs11.finish接下來的幾個步驟() 引擎.cleanup() – Becky

+0

Heikki - 我真的停留在這。我不知道如何解決分段錯誤。如果您有任何建議,請告訴我。 – Becky

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代碼有問題嗎?

相關問題