Python 如何使用DER格式证书中的密钥使用M2Crypto对消息进行数字签名

Python 如何使用DER格式证书中的密钥使用M2Crypto对消息进行数字签名,python,digital-signature,digital-certificate,m2crypto,Python,Digital Signature,Digital Certificate,M2crypto,我正在做一个项目来实现发送消息的数字签名,并决定为此使用M2Crypto 我有一个证书(DER格式),我从中提取密钥对消息进行签名。由于某种原因,当我调用“sign_update”方法时,我不断地得到一个难看的分段错误 鉴于前面我在这里读到的例子,我显然遗漏了一些东西 以下是我正在研究的示例: from M2Crypto.X509 import * cert = load_cert( 'certificate.cer', format=1 ) Pub_key = cert.get_pubkey

我正在做一个项目来实现发送消息的数字签名,并决定为此使用M2Crypto

我有一个证书(DER格式),我从中提取密钥对消息进行签名。由于某种原因,当我调用“sign_update”方法时,我不断地得到一个难看的分段错误

鉴于前面我在这里读到的例子,我显然遗漏了一些东西

以下是我正在研究的示例:

from M2Crypto.X509 import *

cert = load_cert( 'certificate.cer', format=1 )
Pub_key = cert.get_pubkey()
Pub_key.reset_context(md='sha1')
Pub_key.sign_init()
Pub_key.sign_update( "This should be good." )

print Pub_key.sign_final()
提前感谢您的帮助


Pablo一件显而易见的事情跳到了我的面前:你说你的证书是DER格式的,但是你把
format=0
传递给
load\u cert()
,意思是PEM。看见不过,可能不是导致您出现问题的原因(如果您混合使用证书类型,我希望您会得到一个例外)

更新经过深思熟虑后,我认为您在尝试做错误的事情,这就是它崩溃的原因(尽管它当然不应该崩溃,但会引发异常)。无法使用证书中的公钥对邮件进行签名。那就像做数字伪造一样


这样想吧。您将收到我的证书,其中包含我的公钥。您可以使用公钥加密给我的消息。只有我能用我的私钥解密。您可以使用您的私钥对邮件进行签名,我可以使用您的公钥验证您的签名。

没有私钥文件,这就是它崩溃的原因,我无法对其进行签名。

谢谢您指出这一点。你是对的,这不是问题的原因。我忘了更改那段代码:我正在做一些测试,看看通过将证书转换为PEM格式,我是否成功地解决了这个问题,但没有成功。我不确定您是否会收到编辑过的通知,所以只需在此处添加一条注释,以便您记住检查我的更新注释:)您好,谢谢您的更新。是的,我认为你是对的。有人告诉我私钥在证书里面,但经过验证,我们发现私钥文件丢失了,没有人备份。这可能就是它崩溃的原因:没有用于签名的私钥。谢谢你的回复,它帮助我们看到了真正的问题(帕布罗诺问题)。既然这解决了你的问题,你应该接受我的回答。这样,人们将来更可能回答您的问题(我们可以看到接受的答案百分比,低百分比不鼓励回答)。