检查 Outlook 邮件 (*.msg) 是否经过数字签名或加密

本文关键字:经过 是否 数字签名 加密 msg Outlook 邮件 检查 | 更新日期: 2023-09-27 18:30:54

我有一个Web应用程序,允许使用文件上传上传Outlook Mails(*.msg)。客户希望禁止商店进行数字签名或加密的邮件。因此,在上传邮件后,我应该检查邮件是签名还是加密。

如果有办法检查一下?像文件流中的模式?

检查 Outlook 邮件 (*.msg) 是否经过数字签名或加密

检查英语单词不仅有效,而且是实际记录的方法。

请参阅权威机构:

2.1.3.1.3 识别表示明文签名消息的消息对象

如果消息对象具有消息类 (PidTagMessageClass 属性 ([MS-OXCMSG] 第 2.2.1.3 节))的值 "IPM。Note.SMIME.MultipartSigned",并且只包含一个附件 对象,它应被视为明文签名的消息。附加 可以执行验证步骤以验证附件 对象使用适当的媒体类型进行标记(例如, PidTagAttachMimeTag 属性([MS-OXPROPS] 第 2.680 节)具有值 "多部分/签名"),表示有效的多部分/签名 MIME [RFC1847] 中指定的实体。如果邮件类值不是 "IPM。Note.SMIME.MultipartSigned",但它以后缀结尾 '".斯米姆。多部分签名",消息对象 MAY<7><8>被视为 明文签名的邮件。

如果消息类值为 "IPM。注意.SMIME.MultipartSigned"没有指定的结构 在第 2.1.3.1 节中,行为未定义。

2.1.3.2.3 识别表示不透明签名或加密 S/MIME 的邮件对象

如果消息对象具有消息类 (PidTagMessageClass 属性 ([MS-OXCMSG] 第 2.2.1.3 节))"IPM.注意.SMIME",并包含 正好是一个附件对象,它应该被视为一个 不透明签名的邮件或加密的邮件。其他验证 可以执行步骤来验证附件对象是否已标记 具有适当的媒体类型(例如,PidTagAttachMimeTag 属性([MS-OXPROPS] 第 2.680 节)是 "application/pkcs7-mime"或"application/x-pkcs7-mime",或者它是 "应用程序/八位字节流"和文件名,由 PidTagAttach文件名属性([MS-OXPROPS] 第 2.671 节),并且具有 文件扩展名".p7m")并表示有效的加密或 不透明签名的邮件,如 [RFC3852] 中指定。如果值 邮件类不是"IPM.Note.SMIME",但以后缀结尾 '".SMIME",则消息对象 MAY<11> 被视为 不透明签名的邮件或加密的邮件。

邮件类值"IPM。注意.SMIME"可能含糊不清.<12>

如果邮件对象的邮件类值为"IPM.注意.SMIME"确实 不具有本节中指定的适当结构或内容 2.1.3.2,则行为未定义。

编辑:

更具体地说,是的,您应该在文件流中寻找"模式"。

具体来说,如果 MSG 是 unicode,您将扫描"__substg1.0_001A001F"流,并检查上述模式。

该MSG文件是包含流和存储的OLE结构化存储文件。 若要获取流,请使用 OLE 存储库(如 OpenMCDF)(如果你在 C# 环境中)。 Java,Python等也有类似的。

这篇博文很好地描述了格式,同一作者的另一篇文章准确地描述了你所追求的内容,即有关权限管理邮件的信息。

基本上,只要消息符合文件格式,这些帖子和规范就应该为您提供检查签名和加密所需的一切。

检查英语单词是一个坏主意。如果用户不是用英语书写,如果加密数据的伪随机流碰巧在他们正在使用的某些编码中创建诸如"或"或"和"之类的单词怎么办?只是不可靠。

编辑:

当我说检查英语单词是一个坏主意时,为了澄清我的意思,我的意思是说简单地扫描文件并验证是否存在一组特定的单词是坏主意。由于有人对这个解决方案投了反对票,我觉得他们可能因为这种模棱两可而误解了我在说什么。

正如另一位用户在他们的答案中指出的那样,解析对象并实际处理数据中的条件是可以的。您可以从他们的帖子中看到这是记录的方法并且工作正常,因为它基于标准。这类似于我在这里给出的两篇文章和格式规范的信息。

要打开邮件并查看,我建议您使用Outlook Redemption。这就是我使用的,它可以在没有服务器上安装Outlook的情况下工作。如果 GetMessageFromMsgFile 方法返回 RDOEncryptedMessage,则表示您的邮件已加密或签名。