如何使用DER格式证书中的密钥通过M2Crypto数字签名消息

1 投票
2 回答
2577 浏览
提问于 2025-04-15 20:09

我正在做一个项目,想给发出的消息加上数字签名,所以决定使用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

2 个回答

0

没有私钥文件,这就是为什么它崩溃了,我无法进行签名。

2

有一点很明显:你说你的证书是DER格式,但你在调用load_cert()时传入了format=0,这意味着你想用PEM格式。你可以查看X509模块的相关变量。不过,这可能不是导致你问题的原因(我觉得如果你混用了证书类型,应该会出现异常)。

更新 经过进一步思考,我觉得你可能在做错误的事情,这就是为什么程序崩溃了(当然,它不应该崩溃,而是应该抛出异常)。你不能用证书里的公钥来签名消息。这就像是在进行数字伪造。

你可以这样理解:你收到我的证书,里面有我的公钥。你可以用这个公钥来加密发给我的消息。只有我能用我的私钥解密。你可以用你的私钥来签名这条消息,而我可以用你的公钥来验证你的签名。

撰写回答