1

我收到加密和签名的 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 可以在解密过程中产生特定的符号,例如换行符或源消息中不存在的其他符号。或者它可以处理非标准算法(至少据我所知openssl有非标准的私钥存储格式)

我使用openssl 0.9.8h。而另一边的smime消息是由“webMethods EDI version 6.5”软件形成的(它是处理EDI消息的AS2服务器)。

这个错误的原因是什么?

您能建议尝试另一种 smime 工具吗?

4

1 回答 1

1

[简介] 感谢您的问题 ;-) 我终于花了一些时间来正式确定如何使用 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”来调试加密部分;-)

[解决方案#1] 解密 HTTP 负载:

  1. 在 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]
    
  2. 然后,您可以使用:

    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] 非常解密消息的签名:

  1. 只需使用

    openssl.exe smime -verify -in "decrypted.with-OpenSSL.txt" -CAfile "Client.cer"
    

让我知道它是否对您有帮助...

于 2010-12-07T11:06:07.817 回答