为什么验证smime签名失败?

时间:2012-08-26 22:05:08

标签: email openssl digital-signature smime

我收到了一封带有签名的电子邮件,我正在尝试验证。

我正在使用openssl openssl smime -inform SMIME -CAfile all.pem -verify -in signed.eml 检查,这会产生错误:

4144:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:asn1_lib.c:142:
4144:error:0D068066:asn1 encoding routines:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1302:
4144:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:379:Type=X509_SIG
4144:error:21071069:PKCS7 routines:PKCS7_signatureVerify:signature failure:pk7_doit.c:978:
4144:error:21075069:PKCS7 routines:PKCS7_verify:signature failure:pk7_smime.c:312:

在谷歌搜索了一段时间后,这首先似乎是asn.1结构的错误。但是运行openssl asn1parse -i -in sig.txt(sig.txt只是之前来自signed.eml的签名)没有错误,并且很好地显示了ASN.1树(恕我直言)。

作为旁注:电子邮件显示为在MS Outlook 2010中成功验证。

任何想法可能是签名的错误或我在这里打的openscl的pecularities?除了openssl之外的任何其他工具来检查签名(以排除openssl问题)?

1 个答案:

答案 0 :(得分:1)

好的,所以在openssl mailing list的帮助下:

是asn.1结构的错误。签名格式不正确。这不会导致asn1parse出现问题,但会在OpenSSL尝试验证时出现问题 它没有正确的DigestInfo结构,只有原始的SHA1哈希值,这违反了PKCS#1规范中提到的RSA方案。

Outlook(和其他客户端)似乎可以容忍原始格式,而openssl(以及Thunderbird和其他客户端)则不会。