其他分享
首页 > 其他分享> > 如何使用M2Crypto从.pem文件加载受密码保护的私钥?

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

作者:互联网

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

python
>>> import M2Crypto
>>> pk = M2Crypto.RSA.load_key('private.pem')
Enter passphrase:
>>>

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

>>> 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”替换“…”)

我究竟做错了什么?

解决方法:

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

>>> def gimmepw(*args):
...     print 'args:', repr(args)
...     return 'test'
... 
>>> M2Crypto.RSA.load_key('key.pem', gimmepw)
args: (0,)
<M2Crypto.RSA.RSA instance at 0xb6e8050c>

你应该试试:

def gimmepw(*args):
    return 'mysecret'

标签:python,python-2-4,pem,m2crypto
来源: https://codeday.me/bug/20190530/1183238.html