如何在 DNS 中输入强(长) DKIM 密钥?

如何在 DNS 中输入强(长) DKIM 密钥?

我尝试在 DNS 中输入 4028 位 DKIM 密钥,但似乎超出了 UDP 512 字节的限制以及 TXT 记录的最大记录大小。

如何正确地创建一个大密钥(隐含更大的编码大小)并将其导入 DNS?

答案1

您需要在文本字段中拆分它们。我认为 2048 是密钥大小的实际限制。将文本字段拆分为 255 个字符或更少的部分。每次拆分都会产生开销。

长字段有两种格式。

TXT  "part one" \
     "part two"
TXT ( "part one"
      "part two" )

两者将合并为“第一部分第二部分”。 更多细节来自 Zytrax。

为了生成我的 DKIM 条目,我插入了我的公钥文件并将其括在引号中。
我的公钥文件包含以下内容:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD78Ki2d0zmOlmjYNDC7eLG3af12KrjmPDeYRr3
q9MGquKRkRFlY+Alq4vMxnp5pZ7lDaAXXwLYjN91YY7ARbCEpqapA9Asl854BCHMA7L+nvk9kgC0
ovLlGvg+hhqIPqwLNI97VSRedE60eS+CwcShamHTMOXalq2pOUw7anuenQIDAQAB

编辑我的 DNS 区域文件中的密钥后,显示如下:

dkim3._domainkey        IN      TXT     ("v=DKIM1; t=s; p=" 
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD78Ki2d0zmOlmjYNDC7eLG3af12KrjmPDeYRr3"
"q9MGquKRkRFlY+Alq4vMxnp5pZ7lDaAXXwLYjN91YY7ARbCEpqapA9Asl854BCHMA7L+nvk9kgC0"
"ovLlGvg+hhqIPqwLNI97VSRedE60eS+CwcShamHTMOXalq2pOUw7anuenQIDAQAB")

DNS 返回如下:

 bill:~$ host -t TXT dkim3._domainkey.systemajik.com
 dkim3._domainkey.systemajik.com descriptive text "v=DKIM1\; t=s\; p=" "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD78Ki2d0zmOlmjYNDC7eLG3af12KrjmPDeYRr3" "q9MGquKRkRFlY+Alq4vMxnp5pZ7lDaAXXwLYjN91YY7ARbCEpqapA9Asl854BCHMA7L+nvk9kgC0" "ovLlGvg+hhqIPqwLNI97VSRedE60eS+CwcShamHTMOXalq2pOUw7anuenQIDAQAB"

DNS 将其视为一个长字符串,行与行之间没有多余的空格。所有" "序列都会被忽略。

答案2

如果它是亚马逊 53 号公路那么不要在块之间使用换行符(仅使用空格)。

"do it" "this way"

"not like"
"this"

https://serverfault.com/a/763871/80856

答案3

我知道这篇文章已经过时了,但我今天在查询“使用 UltraDNS 的 DKIM 2048 位密钥”时发现了它。我的 DNS 团队曾尝试将密钥分成两部分,两部分用引号括起来,中间留一个空格。这导致 UltraDNS 提供 3 个数据包(中间的数据包是空的),从而导致验证结果不一致。

在 UltraDNS 控制面板中对我有用的只是将整个记录放在引号中提交,而无需多组引号、分隔符等。现在可以按预期工作。

答案4

这不是最漂亮的脚本,但它节省了我的命名/绑定主机的时间和拼写错误。

#!/usr/bin/env bash
pretty_dkim() {
  grep DKIM1 | sed 's/.*v=DKIM/v=DKIM/' | fold -s -w76 |sed 's/^/"/g;s/$/"/g;1 s/^/(/' | tac | sed '1 s/$/)/'| tac ;
}
if [ -t 0 ]; then 
  cat "$1" | pretty_dkim;
else
  pretty_dkim ;
fi

如果不需要换行符,你可以添加一个| tr '\n' ' '

相关内容