我收到加密和签名的smime消息。 解密是可以的,数据似乎是正确的。
openssl.exe smime -decrypt -in %1 -out %1_signed.txt -inkey myPrivate.pem
但是在验证签名阶段时我会收到错误。
openssl.exe smime -verify -CAfile senderCACert.pem -certfile senderCert.pem -in %1 -out %1_plain
Verification failure
7600:error:21071065:PKCS7 routines:PKCS7_signatureVerify:digest failure:./crypto/pkcs7/pk7_doit.c:9
48:
7600:error:21075069:PKCS7 routines:PKCS7_verify:signature failure:./crypto/pkcs7/pk7_smime.c:312:
发件人两个证书(CA证书和客户端证书)都应该没问题。
我认为openssl可以在解密期间生成特定符号,如换行符或源消息中不存在的其他内容。或者它可以处理非标准的algorythm(至少据我所知openssl有非标准的私钥存储格式)
我使用openssl 0.9.8h。另一方面的smime消息由“webMethods EDI 6.5版”软件(它是用于处理EDI消息的AS2服务器)组成。
出现此错误的原因是什么?
你可以建议另一个smime工具试试吗?
答案 0 :(得分:1)
[INTRO] 谢谢你的问题;-)我终于花了一些时间来规范我如何使用OpenSSL调试我的AS2通信。
[背景](1)我正在开发BabelAS2 - http://code.google.com/p/babelas2/ - EDIINT AS2(RFC 4130)标准传输协议的开源VBScript实现。我使用CAPICOM作为加密库。 (2)我想检查如何使用http://www.shininglightpro.com中的“Win32 OpenSSL v0.9.8q”来调试加密部分; - )
[SOLUTION#1]解密HTTP有效负载:
在HTTP有效内容的转储顶部手动添加以下文本
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64
[CRLF]
然后,您可以使用:
openssl smime -decrypt -inkey "Server.pair-of-keys.pem" -in "HTTP-Payload.encrypted.txt.with-manually-added-header.txt" -out "decrypted.with-OpenSSL.txt"
[解决方案#2]解密消息的签名:
只需使用
即可openssl.exe smime -verify -in "decrypted.with-OpenSSL.txt" -CAfile "Client.cer"
让我知道它是否对你有所帮助......