首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用.pem文件通过M2Crypto加载受密码保护的私钥?

如何使用.pem文件通过M2Crypto加载受密码保护的私钥?
EN

Stack Overflow用户
提问于 2012-05-16 08:54:18
回答 2查看 3.8K关注 0票数 5

我在.pem文件中有一个受密码保护的私钥;我想使用它对远程服务器的请求进行签名。在提示输入密码后,我能够加载密钥并输入密码:

代码语言:javascript
复制
python
>>> import M2Crypto
>>> pk = M2Crypto.RSA.load_key('private.pem')
Enter passphrase:
>>>

但是,对于每天早上都重新启动的服务器进程,我需要这样做,因此必须以某种方式自动传递密码。为此,load_key方法支持回调参数,因此我尝试了以下几个变体:

代码语言:javascript
复制
>>> def gimmepw():
...     return 'mysecret'
...
>>> pk = M2Crypto.RSA.load_key('private.pem', gimmepw)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/local/Plone/Python-2.4/.../M2Crypto/RSA.py", line 351, in load_key
    return load_key_bio(bio, callback)
  File "/usr/local/Plone/Python-2.4/.../M2Crypto/RSA.py", line 372, in load_key_bio
    rsa_error()
  File "/usr/local/Plone/Python-2.4/.../M2Crypto/RSA.py", line 302, in rsa_error
    raise RSAError, m2.err_reason_error_string(m2.err_get_error())
M2Crypto.RSA.RSAError: bad password read
>>>

(取代“.”"lib/python2.4/site-packages")

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-16 09:19:37

这是因为回调函数中缺少参数支持。由于它将被至少一个参数调用,因此将发生一个TypeError异常(由M2Crypto捕获)。

代码语言:javascript
复制
>>> def gimmepw(*args):
...     print 'args:', repr(args)
...     return 'test'
... 
>>> M2Crypto.RSA.load_key('key.pem', gimmepw)
args: (0,)
<M2Crypto.RSA.RSA instance at 0xb6e8050c>

你应该试着:

代码语言:javascript
复制
def gimmepw(*args):
    return 'mysecret'
票数 6
EN

Stack Overflow用户

发布于 2015-03-08 08:06:18

注意:从Python2.7开始,callback方法的返回值必须返回一个str类型。

例如,unicode类型将以同样的方式出错。

代码语言:javascript
复制
>>> def gimmepw(*args):
...     return u'test'
... 
>>> M2Crypto.RSA.load_key('key.pem', gimmepw)
Traceback (most recent call last):
  File "test_intuit_data.py", line 76, in <module>
    intuit_rsa_key = RSA.load_key(file='key.pem', callback=gimmepw)
  File "lib/python2.7/site-packages/M2Crypto/RSA.py", line 351, in load_key
    return load_key_bio(bio, callback)
  File "lib/python2.7/site-packages/M2Crypto/RSA.py", line 372, in load_key_bio
    rsa_error()
  File "lib/python2.7/site-packages/M2Crypto/RSA.py", line 302, in rsa_error
    raise RSAError, m2.err_reason_error_string(m2.err_get_error())
M2Crypto.RSA.RSAError: bad password read

如果您使用的是str类型以外的任何输入,请确保适当地将其转换为str

代码语言:javascript
复制
>>> def gimmepw(*args):
...     return str(u'test')
... 
>>> M2Crypto.RSA.load_key('key.pem', gimmepw)
<M2Crypto.RSA.RSA instance at 0xb6e8050c>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10615098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档