我是 s/mime 新手,需要使用 xml 附件对电子邮件进行数字签名,但不幸的是,这封电子邮件的哈希值错误(根据外部系统的响应)。我深入研究了库的代码,发现它为 base64 编码的正文部分创建了一个符号,它是正确的还是应该为 xml 附件内容计算签名?
这里还有一些问题:
- 许多标头/参数由库提供:例如。ContentType 参数、一些标头(如 X-Mailer)和许多其他
- 它为 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);
}