C#| jstedfast / MimeKit |具有DKIM设置的Office 365连接器

问题描述 投票:0回答:2

DKIM是为Office365中的域设置的。 .Net应用程序(目前是MVC 4)通过O365连接器向外部各方发送电子邮件。我们也想用DKIM签名。

我对整个过程并不十分清楚。 MimeKit's Documentation相当清楚。我想我可以使用任何pub / priv密钥生成器(如Putty)来生成密钥对?然后,我将以C#应用程序可以读取的方式存储私钥

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

公钥将作为我的域的DNS记录发布。不幸的是,Office 365 documentation的具体方式并不是很清楚。

总结问题

  • 如果我的系统发送地址AgentOrUserIdentifier[email protected]到底是什么?
  • 我如何将生成的公钥发布到Office 365?

任何启发性的总结将不胜感激,谢谢。

c# asp.net-mvc-4 office365 dkim mimekit
2个回答
0
投票

来自rfc6376, section 2.6

2.6。代理或用户标识符(AUID)

代表签名域标识符(SDID)负责的代理或用户的单个标识符。 AUID包括域名和可选的<local-part>。域名与用于SDID的域名相同或是其子域名。对于DKIM处理,AUID的域名部分仅具有基本域名语义;任何可能的特定于所有者的语义都超出了DKIM的范围。它在3.5节中规定。

注意,可以通过公钥记录中的标志来约束AUID的可接受值。 (见第3.6.1节)


1
投票

我会接受@ jstedfast的答案(虽然没有真正了解它)。万一其他人正在努力解决这个问题,这里有完整的演练:

获取公钥/私钥对。你可以直接使用Puttygen或openssl,但它更容易使用(哦,我以前只知道)......就像https://port25.com/dkim-wizard/

指定您的域名(此处为example.org)和“选择器” - 这可能是您的应用程序名称(“greatapp”)。此选择器将是DNS中公钥的TXT记录。创建其他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 / ZpSdnQK​​2Omx6ZNyHsuvC3MMJYNLQ069ajuJo5FP .......”

将私钥复制到文件,或直接在代码中使用它。 MimeKit需要一个文件或一个流,所以对于这里的快速和脏的例子,我使用的是一个字符串:

var mail = new MimeMessage();
mail.From.Add(new MailboxAddress("Justin Case", "[email protected]"));
mail.To.Add(new MailboxAddress("Candy Barr", "[email protected]"));
... 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一样令人敬畏,不要忘记捐款。

© www.soinside.com 2019 - 2024. All rights reserved.