我正在开发一个实现外发邮件数字签名的项目,并决定使用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()
提前感谢您的帮助,
巴勃罗
答案 0 :(得分:2)
有一件显而易见的事情发生在我身上:你说你的证书是DER格式,但是你将format=0
传递给load_cert()
,这意味着PEM。见X509 module variables。也许不是导致你的问题的原因(如果你混合使用证书类型,我希望你得到一个例外)。
更新经过多次考虑,我认为你在这里试图做错了,这就是它崩溃的原因(虽然它当然不会崩溃而是引发异常)。您无法使用证书中的公钥对邮件进行签名。这就像做伪造数字一样。
这样想。您收到我的证书,其中包含我的公钥。您可以使用公钥来加密消息给我。只有我能够使用我的私钥解密。您可以使用您的私钥对邮件进行签名,然后我可以使用您的公钥来验证您的签名。
答案 1 :(得分:0)
没有私钥文件,这就是它崩溃的原因,我无法签名。