#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:
2.6. Идентификатор агента или пользователя (AUID)
Единый идентификатор, который ссылается на агента или пользователя, от имени которого идентификатор домена подписи (SDID) взял на себя ответственность. Идентификатор AUID состоит из доменного имени и необязательной <локальной части>. Имя домена совпадает с именем, используемым для SDID, или является его поддоменом. Для обработки DKIM часть имени домена AUID имеет только базовую семантику имени домена; любая возможная семантика, зависящая от владельца, выходит за рамки DKIM. Это указано в разделе 3.5.
Обратите внимание, что допустимые значения для AUID могут быть ограничены с помощью флага в записи открытого ключа. (См. Раздел 3.6.1.)