问题标签 [dkim]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
email - 根据域签署电子邮件
我有多个网站在同一台服务器上运行,我将为所有网站设置 DKIM 签名。我遵循了这个优秀的指南,第一次尝试就可以成功地从 PHP 发送签名的电子邮件。
问题是现在所有外发电子邮件都使用同一个域签名,而我希望它们由各自的域签名。我可以通过签名表选择要签名的电子邮件,但似乎我无法选择使用签名 Y 对来自域 X 的所有外发电子邮件进行签名。
这是可能的,在那种情况下 - 我该怎么办?
先感谢您。
- 操作系统: Debian
- 网络服务器: Nginx + PHP-FPM
- 邮件服务器: Postfix
- DKIM: OpenDKIM
dkim - DKIM 签名:令人头疼的问题
我正在尝试将 DKIM 签名应用于从我们的域发送的新闻通讯(邮件列表)。不幸的是,我无法在这里透露域名的名称,所以我将其称为 {mydomain}.co.il。我的选择器是“mta1”。
我按照在线说明进行了发球,但是在测试结果时,我在签名的各个方面都收到了错误!
我使用http://www.port25.com/support/domainkeysdkim-wizard/创建了公钥和私钥。我将整个私钥复制到 .pem 文件中,包括以下行
我将 hMailServer 设置为在我们的域上使用 DKIM 签名,将其指向私钥,并告诉它使用 SHA1(据我所知,它占用的 CPU 较少,更适合大量邮件列表)。
当然,我设置和 DNS 记录是这样的:
首先,我使用http://dkimcore.org/tools/dkimrecordcheck.html检查了 DNS 记录,得到了以下愚蠢信息:
...但这是 port25.com 生成的公钥的精确副本!
接下来,我测试了我的实际 DKIM 签名,如下所示:
我使用http://www.appmaildev.com/en/dkim/测试了我们的 DKIM 签名电子邮件,并收到以下错误:
...但是这是错误的!
我还收到以下错误:
我究竟做错了什么?有谁知道我能做些什么来解决这个问题?
email - DKIM for Mandrill on Amazon's Route 53
I am trying to set up a DKIM record on Amazon's Route 53. I just choose to add TXT record with name like this: mandrill._domainkey.domain.com
and the value is:
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrLHiExVd55zd/IQ/J/mRwSRMAocV/hMB3jXwaHH36d9NaVynQFYV8NaWi69c1veUtRzGt7yAioXqLj7Z4TeEUoOLgrKsn8YnckGs9i3B3tVFB+Ch/4mPhXWiNfNdynHWBcPcbJ8kjEQ2U8y78dHZj1YeRXXVvWob2OaKynO8/lQIDAQAB;"
but Route 53 keeps complaining about:
The record set could not be saved because: - The Value field contains invalid characters or is in an invalid format.
email - Office 365 中的 DKIM 设置
我们被告知可以在我们的邮件服务器上找到我们的 DKIM 设置,不幸的是我们使用的是 Office 365,我们在哪里可以找到 DKIM 的设置?它们甚至在 Office 365 中可用吗?
关于 DKIM 的任何建议也很好。
谢谢
zend-mail - DKIM 标头规范化是否在 To: 标头中的每个逗号后插入一个空格?
使用 Zend 框架 1.12、PHP 5.3.1。为 Zend_Mail 指定多个邮件收件人并使用 Smtp 传输,“To:”标头包含以逗号分隔的收件人列表。例如
To: a@example.com,b@example.com
根据RFC 2822,这似乎是正确的语法。我添加了 DKIM 签名(使用https://github.com/louisameline/php-mail-signature),它可以正常工作,生成 gmail 和其他验证者接受的传递签名,只有一个 To: 收件人。但是对于多个recipents,签名失败。
发送签名邮件check-auth@verifier.port25.com
将电子邮件返回到 Return-path,其中包含各种检查的结果,其中包含它计算的标头和正文的规范化版本。我看到它在规范化 To: 标头时在每个逗号后添加了一个空格(我正在为标头和正文指定宽松的规范化)。事实上,我在规范化 To: 标头时破解了我的签名生成以添加该空间,这解决了问题:port25.com 验证程序、gmail 和其他人现在通过了签名。
但是在我看到的关于 DKIM 宽松规范化的任何描述中,包括对RFC 6376的第 3.4 节的非常仔细的阅读,以及我从上面引用的 github 下载的签名类中的代码,都没有添加任何空白的地方存在于原件中;指定的规范化都是关于更改现有空格的。
所以在我看来,由 port25 验证器完成的规范化与 RFC 6376 不一致——除了 gmail、autorespond+dkim-relaxed@dk.elandsys.com 和http://www.appmaildev 等其他 DKIM 验证器。 com/en/dkim/都同意最终结果(他们没有像 port25 那样显示他们执行的规范化,但如果我不规范化逗号后的空格,他们会拒绝签名)。
这里有人对此有任何见解吗?由于该领域的实践似乎与 2011 年的 RFC 一致,难道不应该更新 RFC 吗?当然还有一个问题,在 WSP 被单个空格替换之前,是否应该将 To: 标头值中的所有逗号规范化为逗号空间,以及是否影响任何其他标头。
最终决议摘要
关于 OP,Evan 的回答完全正确:我的 MTA 是在添加空间,而不是验证器的规范化。我只是没有仔细查看实际收到的 To: 标头。
但是知道这一点并不能完全解决生成正确签名的问题。“根本”问题是 Zend_Mail 使用逗号在标题中生成地址列表值,而没有后面的空格作为分隔符 - 尽管它是完全有效的语法,但对于 MTA 来说,在每个之后引入一个空格也是完全有效的。RFC 6376 指定并广泛实施的宽松规范化不适应这种 MTA 重写。将 Zend_Mail 代码更改为使用逗号空格作为分隔符将是微不足道的,除了它是在一个相当长且复杂的方法中间完成的,该方法将涉及主要的复制粘贴来覆盖,这感觉是错误的。所以我最终做的是编写一个预过滤器,在签名之前将空格放在标题中。
python - 在 Python 中使用 DKIM 手动签署电子邮件
我是 Python 新手,并试图通过套接字通信创建一个电子邮件发送脚本,但似乎无法使用 dkimpy 库对其进行签名。我在网上尝试了几个示例,但在运行 dkim.sign 时都返回了相同的错误:
据我所知, dkim.sign 函数中的第一个变量应该是一个字符串,所以我尝试了 readlines () 甚至 .as_string() 来确定。我检查了该消息,它似乎符合 RFC822。但我会仔细检查是否有人认为这可能是问题所在。没有 dkim.sign 它可以完美运行(减去 SPF/DKIM 等任何安全性)
这是我正在使用的代码片段:
解析的标头也用作套接字发送脚本的输入。我确实有一个用于测试目的的 dkim 密钥,但我认为它甚至没有达到这一点。
有什么见解吗?
编辑:好的,我只是尝试使用 dkimpy lib 中的 dkim.rfc822_parse 解析字符串(而不是对其签名),但出现以下错误:
我是在阅读这篇文章,还是看起来代码需要一个字符串但模式是以字节为单位的?
修正:奇怪的是,我没想到要检查 private_key。我在 Win 中手动创建了我不知道的密钥,Windows 添加了一个不可见的换行符,即使 vim 或 nano 也看不到。使用 MCEdit 将其删除后,该程序可以顺利运行。谢谢您的帮助 :)
email - SPF/DKIM“自动身份验证”如何在邮件黑猩猩上工作?
Mail chimp 在进行电子邮件活动时提供三个级别的身份验证。
- 手动认证
- 无身份验证
- 自动认证
据我了解,手动身份验证是指您在 DNS 上设置自己的 SPF/DKIM 记录。
没有身份验证是指没有人设置任何东西,我很确定可交付性会下降。
自动身份验证是我很好奇的。他们所做的只是要求发送电子邮件的人批准他们的电子邮件地址可以通过验证电子邮件发送。我已经完成了研究,但我无法弄清楚邮件黑猩猩和其他人是如何进行这种自动身份验证的。
是否有任何服务,或者我们是否必须设置自己的电子邮件服务器来完成类似的事情。
此外,“自动”身份验证对可交付性有什么样的影响。
dkim - 如何在 opendkim 中向域电子邮件中添加多个签名标头
我在服务器上运行 opendkim。
在此服务器中,我有两个域:
- 主要的
- 我的外发电子邮件网关
现在在我的签名表中,我为每个域添加了一个 sign DKIM
。
我想知道它是否可能向辅助域添加两个标志。
我想要这个,因为当我们的服务器使用主域的 ip 并MAILGUN
执行相同操作时,添加 DKIM 符号mailgun.org
并添加DKIM
符号到yourdomain.org
,我也想将主域的DKIM
签名和辅助域的DKIM
签名添加到辅助域的电子邮件中,以便到达接收的文件夹在gmail而不是垃圾邮件文件夹中。
此致。
php - 带有自定义邮件标头的 DKIM?
我非常成功地使用 PHPMailer 从我的网站发送 SPF/DKIM 电子邮件。成功的垃圾邮件评级几乎为零。
但是,我想在签名中添加一个自定义邮件头,以使其值具有一定的真实性。
- 这可以做到吗?
- 这可以用 PHPMailer 完成吗?
- 如果是:如何?
插图:
假设我有一个自定义字段X-app-originalSender
。
当我查看外发电子邮件的来源时,我看到
我对这条线最感兴趣,h=From:To:Subject;
并假设必须有一种方法可以将我的自定义字段添加到其中。
如何?
DKIM 规格
来自http://dkim.org/specs/draft-allman-dkim-base-01.html#rfc.section.3.5
签名的标头字段(纯文本,但请参阅说明;必需)。以冒号分隔的 > 标头字段名称列表,用于标识提供给签名算法的标头字段。该字段必须按照呈现给签名算法的顺序包含完整的头字段列表。该字段可以包含签名时不存在的头字段的名称;不存在的标头字段不参与签名计算(即,它们被视为空输入,包括标头字段名称、分隔冒号、标头字段值和任何 CRLF 终止符),并且在验证时不存在标头字段必须以相同的方式处理。该字段不得包含正在创建或验证的 DKIM-Signature 头字段。折叠空格 (FWS) 可以包含在冒号分隔符的任一侧。头字段名称必须以不区分大小写的方式与实际头字段名称进行比较。ABNF: sig-h-tag = "h="FWS hdr-name 0 ( *FWS ":" *FWS hdr-name ) hdr-name = field-name 信息性说明:通过“签名”实际上不存在的标头字段,签名者可以防止在验证之前插入这些标头字段. 然而,由于发送者不可能知道未来可能会创建哪些标头字段,并且某些 MUA 可能会呈现嵌入在消息中的标头字段(例如,作为消息/rfc822 内容类型),因此该解决方案的安全性是不是全部。信息性说明:排除标头字段名称和冒号以及不存在标头字段的标头字段值可防止攻击者插入具有空值的实际标头字段。
java - Java:将 DKIM 私钥从 RSA 转换为 DER for JavaMail
我正在使用DKIM for JavaMail使用 DKIM签署传出邮件。
我的私人 DKIM 密钥生成opendkim-genkey -s default -d example.com
如下:
JavaMail 库的 DKIM 需要 DER 格式的私有 DKIM 密钥,如其自述文件中所述:
DKIM for JavaMail 需要 DER 格式的私钥,您可以使用 openssl 转换 PEM 密钥:
openssl pkcs8 -topk8 -nocrypt -in private.key.pem -out private.key.der -outform der
我正在寻找一种方法来避免使用 openssl 将我的密钥转换为 DER 格式。相反,我想直接在 Java 中进行转换。
我尝试了不同的建议(1、2、3),但到目前为止没有任何效果。
DKIM for Java 像这样处理 DER 文件:
所以最后我需要的是RSAPrivateKey
.
如何RSAPrivateKey
从我的 RSA 私钥轻松生成 DKIM for JavaMail 所需的内容?