根据文档--nosubdomains
“不允许使用此密钥对子域名进行签名”。但是,我们不是无论如何都需要为子域名创建单独的 DKIM 记录吗?
如果我理解错误,请纠正我。将域(d 字段)设置为组织的电子邮件签名和一个选择器(签名中的字段 s)将用于查询密钥,以通过将数字签名(签名中的字段 b)与规范化正文进行比较来验证数字签名。因此,整个过程到目前为止还没有以任何形式考虑子域,只有当 d 字段中提到子域而不是组织域或签名中存在 i 字段时,子域才能出现。在前一种情况下,子域和组织域需要有单独的记录,而在后一种情况下,如果在 TXT 记录中使用 t=s,则验证器应将签名字段 i 的域中的值与 d 字段中的值进行比较。但在任何一种情况下,都可以使用相同的密钥进行验证。
答案1
默认情况下,所有子域都会继承 DKIM,具体定义见RFC 6376, 3.10:
按父域签名
在某些情况下,域最好代表其任何子域应用签名,而无需在每个子域中维护单独的选择器(密钥记录)。默认情况下,与密钥记录相对应的私钥可用于为它们所在域的任何子域签名消息;例如,域 example.com 的密钥记录可用于验证 AUID(签名的“
i=
”标签) 为 的消息sub.example.com
,甚至sub1.sub2.example.com
。为了在不期望的情况下限制此类密钥的功能,
s
可以在t=
密钥记录的“ ”标签中设置“ ”标志,以限制 AUID 域的有效性。如果引用的密钥记录包含“s
”标志作为“ ”标签的一部分t=
,则 AUID 的域(“i=
”标志)必须与 SDID(d=
)域的域相同。如果此标志不存在,则 AUID 的域必须与 SDID 相同,或者是 SDID 的子域。
作为opendkim-genkey
还创建 DNS 密钥记录它具有设置标志的能力t=s
:
−S
(−−[no]subdomains
) 禁止使用此密钥对子域进行签名。默认情况下,将生成密钥记录,以便告知验证者允许子域签名。请注意,出于向后兼容的原因, 的−S
含义与 相同−−nosubdomains
。
这意味着:
- 如果没有,也
t=s
可以使用它d=example.com;s=selector
来验证来自子域的消息([email protected]
)。 - 当
t=s
标志被设置时,只能签名- 精确域 (
d=example.com;s=selector
&[email protected]
) 或 - 主机名 (
d=sub.example.com;s=selector
&[email protected]>
)。
- 精确域 (
实际上,DKIM 并不关心签名中的 ID 是否与From
标头匹配。因此,它与 DMARC 一起使用,后者具有放松模式(RFC 7489, 3.1.1) 其中d=example.com
和被认为是From: <[email protected]>
对齐因为他们分享的是同一个组织域(3.2)。
OpenDKIM 似乎没有实现i=
,可能是因为米尔特没有关于用户的可信赖信息来验证。不实现 就实现确实local-part
有点奇怪。t=s
i=