我收到了一封带有签名的电子邮件,我正在尝试验证。
我正在使用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问题)?
答案 0 :(得分:1)
好的,所以在openssl mailing list的帮助下:
是asn.1结构的错误。签名格式不正确。这不会导致asn1parse出现问题,但会在OpenSSL尝试验证时出现问题 它没有正确的DigestInfo结构,只有原始的SHA1哈希值,这违反了PKCS#1规范中提到的RSA方案。
Outlook(和其他客户端)似乎可以容忍原始格式,而openssl(以及Thunderbird和其他客户端)则不会。