【问题标题】:How to digitally sign a message with M2Crypto using the keys within a DER format certificate如何使用 DER 格式证书中的密钥使用 M2Crypto 对消息进行数字签名
【发布时间】:2011-01-24 23:25:33
【问题描述】:

我正在做一个项目来实现传出消息的数字签名,并决定为此使用 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()

提前感谢您的帮助,

巴勃罗

【问题讨论】:

    标签: python digital-signature digital-certificate m2crypto


    【解决方案1】:

    一件明显的事情让我很震惊:你说你的证书是 DER 格式,但你将 format=0 传递给 load_cert(),这意味着 PEM。见X509 module variables。不过,也许不是导致您的问题的原因(如果您混合使用证书类型,我希望您会得到一个例外)。

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

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

    【讨论】:

    • 感谢您指出这一点。你是对的,这不是问题的原因。我忘了更改那段代码:我正在做一些测试,看看是否通过将证书转换为 PEM 格式我设法解决了这个问题 - 没有成功。
    • 不确定您是否会收到修改后的通知,所以只需在此处添加评论,以便您记得查看我更新后的评论:)
    • 您好,感谢您的更新。是的,我认为你是对的。有人告诉我私钥在那个证书里面,但经过一番验证,我们发现私钥文件丢失了,没有人备份它。这可能就是它崩溃的原因:没有用于签名的私钥。感谢您的回复,它帮助我们看到了真正的问题 =) Pablo
    • 没问题。由于这解决了您的问题,您应该将我的答案标记为已接受。这样,人们将来更有可能回答您的问题(我们可以看到被接受的答案百分比,而低百分比不鼓励回答)。
    【解决方案2】:

    没有私钥文件,所以它崩溃了,我无法签名。

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      相关资源
      最近更新 更多