使用 OpenSSL 解码/提取 smime.p7m 文件内容(带有嵌入文件的电子邮件)?

Posted

技术标签:

【中文标题】使用 OpenSSL 解码/提取 smime.p7m 文件内容(带有嵌入文件的电子邮件)?【英文标题】:Decode/extract smime.p7m file contents (email with embedded files) with OpenSSL? 【发布时间】:2010-10-01 09:51:06 【问题描述】:

我们有一个旧进程 (VBScript),它读取一个公共邮箱并将某些电子邮件处理到数据库中。

新法规现在对所有带有附件的邮件进行数字签名。

该过程现在只提取一个文件 (smime.p7m)。使用基于 GUI 的查看器,我可以看到嵌入的文件并毫无问题地提取它们。然而,我真正需要的是一个基于命令行的提取器,它将写出嵌入的文件(PDF、DOC、XLS)——它们没有加密,只是签名。我使用没有证书的笔记本电脑对此进行了测试,只需使用上述查看器打开 smime.p7m 文件。

看起来 OpenSSL 将对此进行解码/提取,并且有人设法获得了在 Windows 上编译的版本。但是,对可执行文件的大量试错测试令人沮丧,因为我找不到正确的标志组合来只说“打开 smime.p7m 文件并写出您找到的所有嵌入文件”。在所有选项之后,“openssl smime”似乎总是想要一个“cert.pem”,但我没有。

我错过了什么?提前致谢。

【问题讨论】:

【参考方案1】:

您是否尝试过 openssl 的“-noverify”选项?

对于仅签名的消息,您可以使用

openssl smime -verify -in <signed.eml> -noverify -out /tmp/blob

然后您可以使用类似 RFC822 的解析器从“blob”中获取正文和附件。这意味着您的解析器必须能够编码像quoted-printable 和base64。

【讨论】:

不能说我做到了。在这种环境(军事站点)中,试图让 OpenSSL 完全正常工作是一件苦差事,而我从未真正成功过。最后,编写一个新程序来完成这项工作,利用 Chilkat 库快速完成了这项工作。不过,谢谢你的想法。【参考方案2】:

看起来唯一可用的选项是使用 Chilkat 的库编写一个简单的程序。此选项的费用为 149 美元或 289 美元,具体取决于每个开发人员的许可类型,但至少它是免版税的。

【讨论】:

这很有趣。我很高兴今天找到了这个。

以上是关于使用 OpenSSL 解码/提取 smime.p7m 文件内容(带有嵌入文件的电子邮件)?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用MimeKit解密p7m

无法使用 MimeKit 解密 p7m

使用 OpenSSL 解码 ASN.1 DER OCTET STRING

压缩 AS2 主体

OpenSSL 使用 base64 编码/解码(liang19890820)

使用OpenSSL进行Base64编码和解码