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


19

我试图在DNS中输入4028位DKIM密钥,看来我既超出了UDP 512字节的限制,也超过了TXT记录的最大记录大小。

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


需要更多细节;什么是DNS服务器软件?
JGurtz

1
您是否仔细考虑过密钥大小?RFC指出:“验证者必须能够使用范围从512位到2048位的密钥来验证签名,并且它们可能能够使用更大的密钥来验证签名。” 因此,您的长键可能无法得到验证。
HTTP500

@JGurtz我们正在使用“ UltraDNS”,它是一个托管服务。
goodguys_activate 2011年

@Jason-我们可以做2048,但我认为位长可能超过UDP数据包限制。
goodguys_activate 2011年

1
也许您应该考虑使用异常长的键所产生的问题远远超过您希望从中获得的好处。
John Gardeniers

Answers:


25

您需要在文本字段中拆分它们。我相信2048是密钥大小的实际限制。将文本字段分成不超过255个字符的部分。每个拆分都有开销。

长字段有两种格式。

TXT“第一部分” \“第二部分”

TXT(“第一部分”“第二部分”)

两者将合并为“第二部分”。 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将其视为一个长字符串,在连接行的位置没有多余空格。所有" "序列都将被忽略。


你能举个例子吗?为此,我不知道如何弄清楚第1部分和第2部分是什么。...#threadnecro
janw 2013年

1
@janw我添加了一个键作为示例。该密钥只有1024位。
BillThor

5
Tnx快速回复。但是此键适合255键。所以我仍然不知道如何将其拆分为多个键。
janw

1
并非DNS忽略了" "序列,您实际上在最后的引用中证明了这一点。这是SPF RFC 4408第3.1.3节它定义了串联应当由应用程序阅读SPF验证DNS记录中。
菲尔

3
@Alnitak在这种情况下适用的RFC是tools.ietf.org/html/rfc6376#section-3.6。字符串是串联在一起的,它们之间没有空格。SPF和其他格式遵循相同的规则,允许在任意位置放置中断。这样做可以提高可读性或限制记录大小。
BillThor


1

如果将Poweradmin UI用于pdns,则只需在输入字段中输入整个dkim字符串。

v=DKIM1;k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxtR3bw1Kbh1B7q4+5aWjTj2YEFwv230gcv+NMp4KouOSLdIr0mCMiwDZpY+7zCdks0zMXtz+F5TPij/NkSAxIKBbJqbIO3mvAhgeI0Vy5aQ5prwnIyXUj54po6AsXbv5Ud2tFbGSsdIhvWiC755d3WaFs8mdWFkpSxprlW6PobCzOWDayWGCvsNfHpjmTxHZinkd3TmLQqE/O6Nb1YnRwQwUCLioSyudV+5Bd2+rXZ2V9FYAOiK2aQi2aSTiUaLCVxft9H6xen3JDaKsuu43QMBrhydoJOCV2QaY82IxqE3GgZrlADu6YEOfotdwD2aA9GRwVB88GqdXL8HwgEGTbwIDAQAB

0

如果记录大于UDP 512字节的限制是可以的,因为DNS将使用TCP。

这对用户应该是透明的,但是有时有故障的防火墙设备(例如Cisco PIX / ASA)将过滤/阻止这些较大的查询。


0

我知道这篇文章很古老,但是今天我在查询“使用UltraDNS的DKIM 2048位密钥”时发现了。我的DNS小组曾试图将密钥分为两部分,两部分之间用引号引起来,中间用空格隔开。这导致UltraDNS提供3个数据包(中间的一个数据包为空),从而导致验证结果不一致。

在UltraDNS控制面板中对我有用的只是将整个记录以引号提交,而没有多套引号,定界符等。现在可以按预期工作。


-1

如果您使用MySQL / MariaDB作为DNS后端,例如PowerDNS,则可以调整内容列的大小。

默认PowerDNS内容长度为VARCHAR(255)

因此,您的DKIM签名将被修剪为255个字符

解决这个问题

只需通过MySQL CLI / MariaDB CLI更改内容大小

mysql -u root -p

USE powerdns;
alter table records modify column content text not null;

重新启动您的DNS服务(例如PowerDNS)

service pdns restart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.