2010-10-14 368 views
0

我收到加密和簽名的smime消息。 解密是好的,數據似乎是正確的。OpenSSL 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 version 6.5」軟件(它是處理EDI消息的AS2服務器)組成。

這個錯誤的原因是什麼?

你能建議另一個smime工具來嘗試嗎?

回答

1

[INTRO] 感謝您的問題;-)我終於花了一些時間來正式確定如何使用OpenSSL調試AS2通信。 (1)我正在開發BabelAS2 - http://code.google.com/p/babelas2/ - EDIINT AS2(RFC 4130)標準傳輸協議的開源VBScript實現。我使用CAPICOM作爲密碼庫。 (2)我想檢查我怎樣才能使用 「的Win32 OpenSSL的v0.9.8q」 從http://www.shininglightpro.com調試加密部分;-)

[解#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" 
    

讓我知道,如果它幫助你...

+0

謝謝。我已經解決了這個問題,並在這裏描述它:http://stackoverflow.com/questions/3975612/openssl-treats-smime-message-with-content-type-application-edi-as-text-and-chan – Donz 2010-12-07 13:13:53

+0

@Donz ,感謝您的反饋和您的鏈接,如果我遇到'Application/EDI'問題,我會記住它;-) – Babelabout 2010-12-08 07:41:20