Соединитель C # | jstedfast / MimeKit | Office 365 с настройкой DKIM

#c# #asp.net-mvc-4 #office365 #dkim #mimekit

#c# #asp.net-mvc-4 #office365 #dkim #mimekit

Вопрос:

DKIM настроен для домена в Office365. Приложение .Net (в настоящее время MVC 4) отправляет электронную почту через соединитель O365 внешним сторонам. Мы также хотели бы подписать их с помощью DKIM.

Я не совсем понимаю весь процесс. Документация MimeKit достаточно понятна. Я полагаю, я могу использовать любой генератор ключей pub / priv, такой как Putty, для создания пары ключей? Затем я бы сохранил закрытый ключ таким образом, чтобы приложение C # могло его считывать

 var signer = new DkimSigner ("privatekey.pem") {
   SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha1,
   AgentOrUserIdentifier = "@eng.example.com",
   QueryMethod = "dns/txt",
};
  

Открытый ключ будет опубликован как запись DNS для моего домена. К сожалению, в документации Office 365 не совсем ясно, как именно.

Общие вопросы

  • Что именно происходит AgentOrUserIdentifier , если моя система отправляет с адресом application@example.org ?
  • Как именно я должен опубликовать свой сгенерированный открытый ключ в Office 365?

Буду признателен за любое информативное резюме, спасибо.

Ответ №1:

Я приму ответ @jstedfast (хотя и не совсем понимаю его). На всякий случай, если у кого-то еще есть проблемы с этим, вот полное пошаговое руководство:

Получите пару открытых / закрытых ключей. Вы можете использовать Puttygen или openssl напрямую, но это проще в использовании (о, если бы я только знал заранее), например https://port25.com/dkim-wizard /

Укажите свое доменное имя (example.org здесь) и «селектор» — это может быть имя вашего приложения («greatapp»). Этот селектор будет текстовой записью для открытого ключа в DNS. Создайте дополнительную запись DNS (TXT); оставьте записи Office365 нетронутыми. Поскольку они регулярно вращают клавиши, вам нужна дополнительная запись, которой вы можете управлять. greatapp._domainkey.example.org В ТЕКСТОВОМ ФОРМАТЕ «k = rsa ; p= here goes the stuff between -----BEGIN PUBLIC KEY----- and -----END PUBLIC KEY----- «, например, «k = rsa ; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhvIwVBomj dx2CEBbY/ZpSdnQK2Omx6ZNyHsuvC3MMJYNLQ069ajuJo5FP…….»

Скопируйте закрытый ключ в файл или используйте его непосредственно в своем коде. MimeKit ожидает либо файл, либо поток, поэтому для быстрого и грязного примера здесь я использую строку:

 var mail = new MimeMessage();
mail.From.Add(new MailboxAddress("Justin Case", "justin@example.org"));
mail.To.Add(new MailboxAddress("Candy Barr", "candy@example.org"));
... subject etc
var privateKey = @"-----BEGIN RSA PRIVATE KEY-----......";
var privateKeyStream = new MemoryStream(Encoding.Default.GetBytes(privateKey));
mail.Sign(new DkimSigner(privateKeyStream, "example.org", "greatapp", DkimSignatureAlgorithm.RsaSha256), new HeaderId[] { HeaderId.From, HeaderId.Subject }, DkimCanonicalizationAlgorithm.Simple, DkimCanonicalizationAlgorithm.Simple);

... Connect client and send.
  

Благодаря jstedfast существует нечто столь же потрясающее, как MailKit / MimeKit, не забудьте пожертвовать.

Ответ №2:

Из rfc6376, раздел 2.6:

2.6. Идентификатор агента или пользователя (AUID)

Единый идентификатор, который ссылается на агента или пользователя, от имени которого идентификатор домена подписи (SDID) взял на себя ответственность. Идентификатор AUID состоит из доменного имени и необязательной <локальной части>. Имя домена совпадает с именем, используемым для SDID, или является его поддоменом. Для обработки DKIM часть имени домена AUID имеет только базовую семантику имени домена; любая возможная семантика, зависящая от владельца, выходит за рамки DKIM. Это указано в разделе 3.5.

Обратите внимание, что допустимые значения для AUID могут быть ограничены с помощью флага в записи открытого ключа. (См. Раздел 3.6.1.)