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 に答える