0

我是 s/mime 新手,需要使用 xml 附件对电子邮件进行数字签名,但不幸的是,这封电子邮件的哈希值错误(根据外部系统的响应)。我深入研究了库的代码,发现它为 base64 编码的正文部分创建了一个符号,它是正确的还是应该为 xml 附件内容计算签名?

这里还有一些问题:

  1. 许多标头/参数由库提供:例如。ContentType 参数、一些标头(如 X-Mailer)和许多其他
  2. 它为 Content-Type: text/plain 创建了一个空边界,尽管除了附件之外我没有任何文本

这是我的代码:

public static void Sign(X509Certificate2 clientCert, string from, string to, string subject, string attachementPath)
{
    Message message = new Message();

    message.From = new Address(from);
    message.To.Add(to);
    message.ContentType.MimeType = "multipart/signed";
    message.ContentType.Parameters.Add("protocol", "\"application/pkcs7-signature\"");
    message.ContentTransferEncoding = ContentTransferEncoding.SevenBits;
    message.AddHeaderField("MIME-Version", "1.0");
    message.Subject = subject;

    var mimePart = new MimePart(attachementPath, false);
    mimePart.ContentTransferEncoding = ContentTransferEncoding.Base64;
    mimePart.Charset = "windows-1251";
    mimePart.ContentType.MimeType = "text/xml";

    message.Attachments.Add(mimePart);
    message.BuildMimePartTree();

    CmsSigner signer = new CmsSigner(clientCert);
    signer.IncludeOption = X509IncludeOption.EndCertOnly;

    message.SmimeAttachSignatureBy(signer);
}
4

0 回答 0