Ошибка 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.