Отправить зашифрованное и подписанное электронное письмо, используя открытый и закрытый ключи для отправки данных в FMCSA - PullRequest
0 голосов
/ 28 февраля 2019

Я использую комплект Mime для отправки почты и шифрования.Код:

   public void SendMail(string filePath)
   {

         var message = new MimeMessage();

            message.From.Add(new MailboxAddress("Test", "xxx@gmail.com"));
            message.To.Add(new MailboxAddress("Test Mail", "xx@xx.xx"));
            message.To.Add(new MailboxAddress("Test", "xxx@xx.com"));
            message.Subject = "TEST: ";

           var subject  = "TEST:";
            var body = new TextPart("plain")
            {
                Text = "Sample comments"
            };

            var attachment = new MimeKit.MimePart("multipart/related", "txt")
            {
                Content = new MimeContent(File.OpenRead(filePath), ContentEncoding.Default),
                ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
                ContentTransferEncoding = ContentEncoding.Base64,
                FileName = Path.GetFileName(filePath)
            };

            var multipart = new Multipart("mixed");
            multipart.Add(body);
            multipart.Add(attachment);
            message.Body = multipart;

                var certificateFile = @"E:\RESDE_RSA.pfx";
                var certificate = new X509Certificate2(certificateFile,"", X509KeyStorageFlags.Exportable);


                var recipientCollection = new CmsRecipientCollection();
                var bountyRecipientCertificate = DotNetUtilities.FromX509Certificate(certificate);

                var recipient = new CmsRecipient(bountyRecipientCertificate);
                recipient.EncryptionAlgorithms = new EncryptionAlgorithm[] { EncryptionAlgorithm.Aes256 };
                recipientCollection.Add(recipient);              

            using (var client = new MailKit.Net.Smtp.SmtpClient())
            {
                client.Connect("smtp.gmail.com", 25, false);

                client.Authenticate("xx@gmail.com", "password");

                client.Send(message);
                client.Disconnect(true);
            }
}

Почта отправляется успешно, но шифрование и подпись сообщения неверны.Я не получил никакого решения о том, как расшифровать и подписать сообщение.Я работаю в приложении MVC.

1 Ответ

0 голосов
/ 28 февраля 2019

Во-первых, это неверно:

var attachment = new MimeKit.MimePart("multipart/related", "txt")

Это приведет к:

Content-Type: multipart/related/txt

Это совершенно неправильный тип пантомимы.

Не уверен, чтовы идете, но это определенно не должно быть multipart ничего.

Теперь к вашему основному вопросу о том, почему ваше сообщение не шифруется.

Легко: вы делаетепервые несколько шагов для получения списка получателей CMS (который выглядит нормально), но вы ничего с ними не делаете.

var certificateFile = @"E:\RESDE_RSA.pfx";
var certificate = new X509Certificate2(certificateFile,"", X509KeyStorageFlags.Exportable);

var recipientCollection = new CmsRecipientCollection();
var bountyRecipientCertificate = DotNetUtilities.FromX509Certificate(certificate);

var recipient = new CmsRecipient(bountyRecipientCertificate);
recipient.EncryptionAlgorithms = new EncryptionAlgorithm[] { EncryptionAlgorithm.Aes256 };
recipientCollection.Add(recipient);

// now you need to actually encrypt
using (var ctx = new TemporarySecureMimeContext ()) {
    var encrypted = ApplicationPkcs7Mime.Encrypt (ctx, recipientCollection, multipart);
    message.Body = encrypted;
}
...