当前位置: 首页 > 面试题库 >

需要使用M2Crypto.Engine来访问USB令牌的帮助

鲍俊杰
2023-03-14
问题内容

我正在使用M2Crypto-0.20.2。我想使用OpenSC项目中的engine_pkcs11和Aladdin
PKI客户端进行基于令牌的身份验证,从而通过ssl进行xmlrpc调用。

from M2Crypto import Engine

Engine.load_dynamic()
dynamic = Engine.Engine('dynamic')
# Load the engine_pkcs from the OpenSC project
dynamic.ctrl_cmd_string("SO_PATH", "/usr/local/ssl/lib/engines/engine_pkcs11.so")
Engine.cleanup()

Engine.load_dynamic()
# Load the Aladdin PKI Client
aladdin = Engine.Engine('dynamic')
aladdin.ctrl_cmd_string("SO_PATH", "/usr/lib/libeTPkcs11.so")

key = aladdin.load_private_key("PIN","password")

这是我收到的错误:

key = pkcs.load_private_key("PIN","eT0ken")
File "/usr/local/lib/python2.4/site-packages/M2Crypto/Engine.py", line 70, in load_private_key
    return self._engine_load_key(m2.engine_load_private_key, name, pin)
File "/usr/local/lib/python2.4/site-packages/M2Crypto/Engine.py", line 60, in _engine_load_key
    raise EngineError(Err.get_error())
M2Crypto.Engine.EngineError: 23730:error:26096075:engine routines:ENGINE_load_private_key:not initialised:eng_pkey.c:112:

对于load_private_key(),应将什么作为第一个参数传递?M2Crypto文档没有对此进行解释。

加载引擎没有任何错误,但是我不确定是否正确加载了它们。似乎引擎ID必须是一个特定名称,但我在任何地方都找不到该列表。 'dynamic'为我工作。

任何帮助,将不胜感激!


问题答案:

找到!!!!

是的,正是我的出身方式。

因此,实际上ENGINE_init()未在M2Crypto.Engine中实现。因此,只有一种解决方案:打补丁!!!(非常小…),所以我创建了一个新的Engine方法(在Engine.py中)

def engine_initz(self):
        """Return engine name"""
        return m2.engine_initz(self._ptr)

为什么选择engine_initz?因为engine_init已经在SWIG / _engine.i中定义,所以:

void engine_init(PyObject *engine_err) {
    Py_INCREF(engine_err);
    _engine_err = engine_err;
}

我真的不知道该怎么做,所以我更喜欢创建一个新的…所以我刚刚在SWIG / _engine.i中添加了以下内容:

%rename(engine_initz) ENGINE_init;
extern int ENGINE_init(ENGINE *);

并重新编译__m2crypto.so,现在只需在启动私钥之前添加“ pkcs11.engine_initz()”,它就可以工作…



 类似资料:
  • 尝试使用Google API的REST调用创建自动化的blogger post(不通过JavaScript或任何其他编码语言)。我能够使用api键和Auth2.0客户端创建所有的谷歌。https://console.cloud.google.com/apis/credentials APi和auth2由于get调用Blogger使用API Key,我可以进行所有的GET活动 为了使用API发布博客

  • 我正在尝试调用我已被指示的API: 这需要一个授权头:承载访问令牌。 我有承载访问令牌,并尝试通过邮递员,并通过C#使用WebRequest,没有任何效果。 在Postman中,我将方法设置为GET,将授权设置为No Auth,在Headers选项卡上,我尝试添加一个标题,如下所示: 标头:“授权” 值:“我的令牌” 我也尝试过 标题:“Bearer”值:“mytoken” 也 标头:“授权” 值

  • 在我最近的遭遇中,我试图实现在前端安全存储的JWT令牌。我以前的方法是在易受XSS攻击的sessionStorage中存储以及。现在,当过期时,我将调用endpoint来获取新的 之后,我们更改实现以防止XSS和CSRF。接下来,Local存储与Cookie 建议将访问令牌存储在内存中,并将刷新令牌存储在cookie中。所以从FE,我们无法访问cookie。(HTTPOnly cookie)和 现

  • 让我们举一个例子,其中SPA使用OIDC隐式流访问API。 由于OAuth作用域是粗粒度的,因此通常需要在资源服务器上执行额外的授权。例如,当通过endpoint访问动态资源(例如文件系统)时,可能会出现这种情况——在endpoint中,访问受到与用户ID相关的权限的限制,但仅使用OAuth作用域是不实际的,因为资源具有动态性。 在这些情况下,endpoint本身可以受到OAuth范围的保护,而对

  • 我使用postMan,输入请求地址http://localhost:8011/umrah/oauth/token?client_id=client_2&username=1234567&password=123456&grant_type=password&client_secret=123456,点击send按钮,出现错误,在内存中工作正常,当我想使用Jdbc令牌存储时,想法控制台错误:找不到令

  • 我正在使用Lusita的PHP Oauth库(https://github.com/Lusitanian/PHPoAuthLib)。 在用户在我的应用程序中获得授权后,我收到了访问令牌和访问令牌密钥的值。现在有了这些值,我想对API进行身份验证调用。如何使用Access Token、Access Token Secret以及Consumer Key和Consumer Secret的值进行调用?我不

  • 目前访问类型处于联机状态。当我需要访问驱动器上的文件/文件夹时,我将浏览器重定向到Google URL并获得访问代码: 一切运转良好!但我只需要第一次重定向。 当我谷歌时,在google Drive API文档中,我发现我可以通过浏览器重定向获得刷新令牌,并将其保存在数据库中。(换句话说,我可以使用脱机访问)。 而且每次当我需要从google drive读取数据时,我使用刷新令牌获得访问令牌,而无

  • 访问令牌凭据(以及任何机密的访问令牌属性)在传输和储存时必须保持机密性,并只与授权服务器、访问令牌生效的资源服务器和访问令牌被颁发的客户端共享。访问令牌凭据必须只能使用带有RFC2818定义的服务器身份验证的1.6节所述的TLS 传输。 当使用隐式授权许可类型时,访问令牌在URI片段中传输,这可能泄露访问令牌给未授权的一方。 授权服务器必须确保访问令牌不能被生成、修改或被未授权一方猜测而产生有效的