C # |jstedfast / MimeKit |Коннектор Office 365 с настройкой DKIM - PullRequest
0 голосов
/ 17 апреля 2019

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?

Любое поучительное резюме будет с благодарностью, спасибо.

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

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

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

Укажите ваше доменное имя (example.org здесь) и «селектор» - это может быть имя вашего приложения («greatapp»). Этот селектор будет записью TXT для открытого ключа в DNS. Создать дополнительную запись DNS (TXT); оставьте Office365 нетронутыми. Поскольку они регулярно вращают клавиши, вам нужна дополнительная запись, которой вы можете управлять. greatapp._domainkey.example.org IN TXT "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 , не забудьте пожертвовать.

0 голосов
/ 18 апреля 2019

С rfc6376, раздел 2.6 :

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

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

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

...