我尝试在 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"
答案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' ' '