Ошибка Opendkim "Не удалось получить ключ" при использовании длинных ключей dkim

Я использую postfix с opendkim и вижу много следующих ошибок:

opendkim[63]: 84D4C390048: key retrieval failed (s=selector1, d=hotmail.com):
'selector1._domainkey.hotmail.com' reply truncated

Ошибка возникает для множества разных доменов, но всегда, если используется длинный ключ dkim (> 1024 бит). Я бы предположил, что это довольно распространенная проблема, но пока не нашел ничего полезного.

Это проблема с моим конпендким конфигом или опендким просто сломан в этом отношении?

1 ответ

Решение

Эта проблема, по-видимому, связана с тем, что opendkim не устанавливает запись псевдоресурса OPT UDPSizeуказывает на то, что он может обрабатывать ответы длиннее 512 байт, как определено в EDNS (wiki), RFC 2671.

Опендким (без EDNS)

Как можно видеть в этом tcpdump opendkim запроса:

28112+ TXT? selector1._domainkey.outlook.com. (50)

и ответ от несвязанного:

28112| q: TXT? selector1._domainkey.outlook.com. 1/0/0 selector1._domainkey.outlook.com.
CNAME selector1._domainkey.outbound.protection.outlook.com. (105)

Копать (EDNS)

Тот же запрос от dig правильно указывает, что большие ответы в порядке (OPT UDPsize=4096):

33350+ [1au] TXT? selector1._domainkey.outlook.com. ar: . OPT UDPsize=4096 (73)

И несвязанный должным образом отвечает с полной записью TXT:

33350 q: TXT? selector1._domainkey.outlook.com. 2/0/1 
selector1._domainkey.outlook.com. CNAME 
selector1._domainkey.outbound.protection.outlook.com., 
selector1._domainkey.outbound.protection.outlook.com.
TXT "v=DKIM1;k=rsa;p=MIIBI[...]1913" ar: . OPT UDPsize=4096 (567)

Ключ DKIM в записи TXT был сокращен для краткости.

К сожалению, проект opendkim кажется мертвым, поэтому вряд ли это будет исправлено.

Вызов res_query(), который делает libopendkim, похоже, не обрабатывает усечение путем повторной передачи запроса. Это работает на моем сервере разработки, поэтому, похоже, это вариант локальной конфигурации. res_query(), похоже, не имеет способа принудительно включить режим TCP, но на странице руководства для него предлагается, что вы можете принудительно включить режим TCP в /etc/resolv.conf локально.

В противном случае вы можете обойти это, связавшись с другим преобразователем, например несвязанным, который поддерживает OpenDKIM.

Другие вопросы по тегам