S / Mime со знаком вложения с использованием MailSystem.Net

#c# #smime #mailsystem.net

#c# #smime #mailsystem.net

Вопрос:

Я новичок в 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);
}
 

Комментарии:

1. Вы должны поделиться дополнительной информацией. О какой библиотеке вы говорите и как она используется? Можете ли вы привести пример сообщения до и после его подписания? Проблемы, которые вы перечисляете, не обязательно являются проблемами.

2. Подпись — это алгоритм шифрования, и для проверки подписи вы должны использовать тот же ключ, алгоритм и данные, что и код, создавший подпись. Много раз с подписанными документами вы начинаете с шаблона и создаете подписанный документ из шаблона. Поэтому я думаю, что перезапись — это просто изменение шаблона.

3. Я использую почтовую систему. Сетевая библиотека и я отредактировали образец кода (без отправки части)