如何使用OpenSSL或PHP获取S/Mime消息的内容?

问题描述:

请在下面找到我收到的消息的标题。我正在研究AS2协议。我可以发送消息,但我收到消息时遇到了一些问题。如何使用OpenSSL或PHP获取S/Mime消息的内容?

Date: Fri, 28 Jun 2013 13:22:03 GMT 
From: XXXXXXX 
Message-ID: XXXXXXXXXX 
MIME-Version: 1.0 
Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m 
Content-Transfer-Encoding: binary 
Content-Disposition: attachment; filename=smime.p7m 
Disposition-Notification-To: XXXXXXXX 
Disposition-Notification-Options: signed-receipt-protocol=optional, pkcs7-signature;   signed-receipt-micalg=optional, sha1 
Receipt-Delivery-Option: XXXXXXXXXXXXXXXx 
EDIINT-Features: CEM, multiple-attachments, AS2-Reliability 
AS2-Version: 1.2 
AS2-To: YYYY 
AS2-From: XXXX 
Content-Length: 59074 

您能告诉我如何使用OpenSSL或PHP获取内容吗? 在大多数命令我执行它给了我这样的错误:

Error reading S/MIME message 
140224062383968:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:150: 
140224062383968:error:0D0D106E:asn1 encoding routines:B64_READ_ASN1:decode error:asn_mime.c:193: 
140224062383968:error:0D0D40CB:asn1 encoding routines:SMIME_read_ASN1:asn1 parse error:asn_mime.c:528: 

你似乎已经喂了头而不是内容到ASN.1 BER解码器。 BER将ASN.1定义的数据结构编码为二进制编码。将字符串送入BER解码器将始终产生类似上面的错误。相反,您应该首先解码内容的基本64位编码,并将生成的二进制数据送入接受CMS数据的解码器(CMS已使用ASN.1指定并使用BER/DER编码)。