【问题标题】:How to check if a MIME message is encrypted or signed using Mimekit?如何检查 MIME 消息是否使用 Mimekit 加密或签名?
【发布时间】:2017-01-19 06:20:03
【问题描述】:

我只想检查 MIME 消息是否使用 Mimekit 加密或签名。

我不想解密它或验证它的签名,我只想知道它是加密的还是签名的。

我希望在 MimeMessage 类中找到以下函数:IsSigned() 和 IsEncrypted(),但这些函数不存在!

谢谢。

【问题讨论】:

    标签: c# mimekit


    【解决方案1】:

    这些方法不存在,因为 MimeMessage 本身无法签名或加密,只有邮件的 Body(或正文的子集)可以签名或加密。

    一个非常简单的解决方案是这样做:

    var pkcs7 = message.Body as ApplicationPkcs7Mime;
    
    bool signed = (message.Body is MultipartSigned) ||
        (pkcs7 != null && pkcs7.SecureMimeType == SecureMimeType.SignedData);
    
    bool encrypted = (message.Body is MultipartEncrypted) ||
        (pkcs7 != null && pkcs7.SecureMimeType == SecureMimeType.EnvelopedData);
    

    注意:MultipartEncrypted 仅用于 PGP(而非 S/MIME),因此如果您只关心 S/MIME,则无需检查 MultipartEncrypted

    同样,ApplicationPkcs7Mime 仅用于 S/MIME,因此如果您只关心 PGP,则无需检查 ApplicationPkcs7Mime

    不过,PGP 和 S/MIME(可以)都使用 MultipartSigned,因此无论哪种情况,您都必须检查一下。

    由于我曾经使用或接收过的每个客户都只对邮件的顶级Body 部分进行签名和/或加密,因此您可能只需要上述检查。但是,兼容 MIME 的客户端可能签署和/或加密 Body 的子部分,因此您必须遍历 MIME 树并检查每个节点,如果您想100% 合规。

    【讨论】:

    • 谢谢,我想这就是我所需要的。
    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 2010-11-05
    • 2017-12-31
    • 2015-09-08
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    相关资源
    最近更新 更多