【问题标题】:C# | jstedfast/MimeKit | Office 365 connector with DKIM setupC# | jstedfast/MimeKit |带有 DKIM 设置的 Office 365 连接器
【发布时间】:2019-04-19 14:39:13
【问题描述】:

为 Office365 中的域设置了 DKIM。 .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 并不太清楚确切的方法。

总结问题

  • 如果我的系统使用地址 application@example.org 发送邮件,AgentOrUserIdentifier 到底是什么?
  • 如何将生成的公钥发布到 Office 365?

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

【问题讨论】:

    标签: c# asp.net-mvc-4 office365 dkim mimekit


    【解决方案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", "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, section 2.6

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

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

      请注意,可接受的 AUID 值可能会通过 公钥记录中的标志。 (参见第 3.6.1 节。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-09
        • 2022-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多