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

时间:2010-03-08 13:00:57

标签: 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()
Pub_key.reset_context(md='sha1')
Pub_key.sign_init()
Pub_key.sign_update( "This should be good." )

print Pub_key.sign_final()

提前感谢您的帮助,

巴勃罗

2 个答案:

答案 0 :(得分:2)

有一件显而易见的事情发生在我身上:你说你的证书是DER格式,但是你将format=0传递给load_cert(),这意味着PEM。见X509 module variables。也许不是导致你的问题的原因(如果你混合使用证书类型,我希望你得到一个例外)。

更新经过多次考虑,我认为你在这里试图做错了,这就是它崩溃的原因(虽然它当然不会崩溃而是引发异常)。您无法使用证书中的公钥对邮件进行签名。这就像做伪造数字一样。

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

答案 1 :(得分:0)

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