Как мне ввести сильный (длинный) ключ DKIM в DNS?

19

Я пытаюсь ввести 4028-битный ключ DKIM в DNS, и кажется, что я превышаю как ограничение 512 байтов UDP, так и максимальный размер записи для записи TXT.

Как правильно создать большой ключ (с подразумеваемым большим кодированным размером) и импортировать его в DNS?

goodguys_activate
источник
Нужно больше деталей; что такое программное обеспечение DNS-сервера?
JGurtz
1
Вы тщательно продумали размер ключа? RFC заявляет: «Верификаторы ДОЛЖНЫ быть в состоянии проверять подписи с ключами в диапазоне от 512 бит до 2048 бит, и они МОГУТ проверять подписи с ключами большего размера». Таким образом, ваш длинный ключ может не пройти проверку.
HTTP500
@JGurtz Мы используем «UltraDNS», это хостинговый сервис.
goodguys_activate
@Jason - мы можем сделать 2048, но я думаю, что длина в битах может превышать предел пакетов UDP.
goodguys_activate
1
Возможно, вам следует учитывать, что проблемы, которые вы создаете с помощью необычно длинного ключа, намного перевешивают преимущества, которые вы надеетесь получить от него.
Джон Гарденье

Ответы:

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 рассматривает это как одну длинную строку без лишних пробелов, где соединяются строки. Все " "последовательности игнорируются.

BillThor
источник
Можете привести пример? для этого я не могу понять, как объяснить, что такое часть 1 и часть 2 ... #threadnecro
janw
1
@janw Я добавил один из своих ключей в качестве примера. Этот ключ составляет всего 1024 бита.
BillThor
5
TNX для быстрого ответа. Но этот ключ вписывается в ключ 255. Так что я до сих пор не понимаю, как вы разбили его на несколько ключей.
Июля
1
Это не DNS, который игнорирует " "последовательности, и вы фактически доказываете это в своей последней цитате. Это SPF RFC 4408 раздел 3.1.3, который определяет, что конкатенация должна использоваться приложениями, читающими записи DNS для проверки SPF.
Фил
3
@Alnitak Применимый RFC для этого случая - tools.ietf.org/html/rfc6376#section-3.6 . Строки объединяются без пробелов между ними. SPF и другие форматы следуют тем же правилам, позволяющим размещать перерывы в произвольных местах. Это можно сделать для удобства чтения или для ограничения размера записи.
BillThor
1

Если вы используете интерфейс Poweradmin для pdns, вы можете просто ввести всю строку dkim в поле ввода.

v=DKIM1;k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxtR3bw1Kbh1B7q4+5aWjTj2YEFwv230gcv+NMp4KouOSLdIr0mCMiwDZpY+7zCdks0zMXtz+F5TPij/NkSAxIKBbJqbIO3mvAhgeI0Vy5aQ5prwnIyXUj54po6AsXbv5Ud2tFbGSsdIhvWiC755d3WaFs8mdWFkpSxprlW6PobCzOWDayWGCvsNfHpjmTxHZinkd3TmLQqE/O6Nb1YnRwQwUCLioSyudV+5Bd2+rXZ2V9FYAOiK2aQi2aSTiUaLCVxft9H6xen3JDaKsuu43QMBrhydoJOCV2QaY82IxqE3GgZrlADu6YEOfotdwD2aA9GRwVB88GqdXL8HwgEGTbwIDAQAB
Йоханнес Винтер
источник
0

Это нормально, если запись превышает ограничение в 512 байтов UDP, потому что DNS будет использовать TCP.

Это должно быть прозрачно для пользователя, но иногда неисправные устройства брандмауэра (такие как Cisco PIX / ASA) будут фильтровать / блокировать эти более крупные запросы.

JGurtz
источник
0

Я знаю, что этот пост - древний, но я нашел его сегодня, когда запрашивал «20-битный ключ DKIM с UltraDNS». Моя команда 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
веб-мастер
источник