为什么我需要在 DNS DKIM 记录中使用 \ 来转义 ;?

为什么我需要在 DNS DKIM 记录中使用 \ 来转义 ;?

我正在我们的域上设置电子邮件身份验证,以允许通过我们的电子邮件服务提供商进行身份验证。

我的理解是 DNS 记录需要具有任何转义,例如 \;

我只是想确保所有 ; 都应该被转义。为此,我想确保我理解为什么需要转义。例如,如果它是 b/c 意味着一些特殊的事情,那么我怎么知道什么时候应该不是被转义,而应该有其特殊含义?还是说它在 DNS TXT 记录中通常具有特殊(且不同)的含义,并且对于 DKIM 设置的特殊用途,我们不是希望它具有特殊含义(也许读取该记录的人都会应用该值)

此外,ESP 告诉我 DNS“由于某种原因添加了 \”(等待确认他们是否只是不理解它。

答案1

选择哪些字符是特殊字符并需要转义取决于所使用的名称服务器以及用于配置名称服务器的界面(例如,如果您使用基于 Web 的配置工具,它可能会自动;为您转义字符)。

标准区域文件(如 RFC 1034/1035 所定义)使用;字符来开始注释。如果没有反斜杠,服务器将忽略从分号到行尾的文本。

请注意,bind不会考虑;已引用的字符串内部来开始注释并要求转义,但如果您这样做了,则会处理它。这两个应该产生相同的反应

IN TXT "asdf;jkl"
IN TXT "asdf\;jkl"

另请注意,当您使用dig或时host,它们打印的输出将在分号后面加一个反斜杠原因早已被遗忘。

答案2

; 是区域文件的注释字符,与大多数 Linux 配置文件中的 # 非常相似。它告诉 Bind 从 ; 开始停止读取,直到该行结束。

如果您需要在 DNS 记录的内容中包含字符 ;,您可以用“ ”将记录内容括起来,这样它将被显示而不进行任何解释。TXT 和 SPF 记录使用这种格式(取自 OpenDKIM 标准):

_domainkey.DOMAIN.TLD. IN TXT "t=y; o=-;"

SELECTOR._domainkey.DOMAIN.TLD. IN TXT "k=rsa; t=y; p=YOUR_PUBLIC_KEY_HERE"

在我的区域文件中,根本没有 \ 字符。注释值前面有一个 ;

; HOST Definitions
mail A 1.2.3.4 ; mail server
time A 1.2.3.4 ; ntp server

我不确定你为什么需要在 DNS 记录中包含转义的 ; 字符。这意味着 Bind 会尝试将其解释为主机名或其他值。

相关内容