В длительной борьбе со значительным процентом сбоев DKIM для подписей, сгенерированных на моих серверах, я заметил интересный случай. Сегодня я получил отчет об отказе DKIM:
User-Agent: OpenDKIM-Filter/2.10.3
Version: 0.1
...
Delivery-Result: other
Feedback-Type: auth-failure
Auth-Failure: signature (signature verification failed)
DKIM-Failure: signature
...
DKIM-Canonicalized-Header: (base64 string)
DKIM-Canonicalized-Body: (another base64 string)
Я заметил что DKIM-Canonicalized-Header
содержится, в свою очередь, это:
cc: Alice A <alice.a@mydomain.com>,
Bob B-B <b-b@mydomain.com>,
"'Charlie C'" <charlie@theirdomain.com>
и фактический заголовок cc
сообщалось как:
cc: Alice A <alice.a@mydomain.com>,
Bob B-B <b-b@mydomain.com>,
"'Charlie C'"
<charlie@theirdomain.com>
К счастью, мне удалось точно определить причину сбоя. Мой сервер подписи сохранил временный файл /tmp/dkim.*, в котором говорится, что тот же заголовок был канонизирован немного иначе:
cc: Alice A <alice.a@mydomain.com>,
Bob B-B <b-b@mydomain.com>,
'Charlie C' <charlie@theirdomain.com>
Теперь самое интересное. Мой сервер подписи запускает очень похожую сборку (opendkim-2.10.3-1.el6.x86_64.rpm) на проверяющий удаленный сервер, и мне не удалось заставить его повторить это ошибочное поведение, то есть вызвать канонизацию "'something'"
. Так как же удаленный сервер мог достичь такой канонизации? Как может настоящий заголовок (которого у меня нет в архиве на моих серверах) быть такой строкой, что она каким-то образом декодируется и канонизируется в "'something'"
на удаленном сервере и на 'something'
на моем сервере? Или, может быть, какое-то дополнительное программное обеспечение имеет тенденцию изменять эти котировки во время обработки MTA? Образованные догадки приветствуются.
Есть два алгоритма канонизации, указанные в Характеристики DKIM. «Простой» алгоритм не меняет заголовок вообще, «расслабленный», помимо преобразования имен полей заголовка в нижний регистр, влияет только на пробелы.
Из-за этого я считаю очень маловероятным, что это как-то связано с OpenDKIM.
Я заглянул в RFC 5322. Хотя 'Charlie C' <charlie@theirdomain.com>
кажется разрешенным, он помечен как устаревший (после ABNF: address-list
-> address
-> mailbox
-> name-addr
-> display-name
-> phrase
-> obs-phrase
). Вероятно, поэтому что-то превращает его в quoted-string
. Вам следует попробовать использовать двойные кавычки ("Charlie C" <charlie@theirdomain.com>
) вместо этого.