DKIM: что это, зачем нужен и как настроить для домена
Зачем нужна DKIM-подпись в email-маркетинге
- Защита от подделки писем. DKIM связывает письмо с доменом, который поставил цифровую подпись, и подтверждает целостность подписанных частей сообщения. Подделать валидную подпись без закрытого ключа домена нельзя. При этом DKIM не подтверждает, что домен подписи совпадает с доменом в видимом поле From — это соответствие проверяет DMARC.
- Доверие со стороны почтовых систем. Gmail и другие почтовые сервисы используют DKIM как один из механизмов аутентификации отправителя. Письма без необходимой аутентификации могут быть отклонены или отмечены как спам.
- Поддержка DMARC. DKIM участвует в email-аутентификации вместе с SPF и DMARC. Если DKIM-проверка проходит успешно и домен из подписи соответствует домену в поле From, это может обеспечить прохождение проверки DMARC.
Механизм DKIM-проверки
1. Генерация ключей и публикация DKIM-записи
Владелец домена генерирует пару криптографических ключей: закрытый (приватный) и открытый (публичный). Закрытый ключ используется отправляющей системой для создания подписи, а открытый публикуется в DNS и используется принимающей стороной для проверки.
_domainkey, например: selector1._domainkey.example.com. DKIM-запись может содержать параметры ключа, в том числе версию (v=DKIM1), тип ключа (k=rsa) и сам публичный ключ (p=...). Почтовый сервер получателя запрашивает эту запись при проверке подписи.2. Подпись исходящего письма
На этом этапе сервер:
- выбирает заголовки письма, которые войдут в подпись;
- применяет заданный алгоритм канонизации к подписываемым данным;
- вычисляет хеш тела письма;
- формирует криптографическую подпись с помощью закрытого ключа;
- добавляет результат в заголовок
DKIM-Signature.
DKIM-Signature содержит ключевые параметры:v— версия DKIM;d— домен, от имени которого создаётся DKIM-подпись;s— селектор;h— список подписанных заголовков;bh— хеш тела письма (Body Hash);b— цифровая подпись.
3. Проверка DKIM-подписи получателем
DKIM-Signature. Найдя его, сервер:- формирует DNS-запрос, используя домен (
d=) и селектор (s=) из подписи; - получает открытый ключ;
- вычисляет хеш подписанных данных по правилам, указанным в DKIM-подписи;
- с помощью открытого ключа проверяет криптографическую подпись и сравнивает необходимые значения.
pass. Если подпись не удаётся подтвердить, проверка может завершиться результатом fail или другой ошибкой в зависимости от причины.4. Результат проверки и его значение
Результат DKIM учитывается принимающей системой при аутентификации сообщения. Успешная проверка подтверждает, что подписанные части письма не были изменены таким образом, который нарушает подпись, и что подпись создана с использованием закрытого ключа, соответствующего опубликованному открытому ключу.
d= должен соответствовать домену в поле From.5. Ограничения DKIM
DKIM не подтверждает добросовестность владельца домена: злоумышленник тоже может зарегистрировать собственный домен и корректно настроить для него DKIM. Кроме того, валидная DKIM-подпись не означает, что домен подписи соответствует домену в видимом поле From.
relaxed допускает некоторые изменения форматирования, которые при более строгой канонизации могли бы нарушить подпись.Как настроить DKIM для домена
Шаг 1. Генерация DKIM-ключей
Создайте пару ключей — публичный и приватный — для вашего домена. Если вы используете сервис email-рассылок или почтовый хостинг, он обычно предоставляет данные, необходимые для настройки DKIM.
dkim1, mail или default.Шаг 2. Создание DKIM-записи в DNS
- Имя записи строится на основе селектора и
_domainkey, напримерdefault._domainkey.example.com. - Значение или целевая запись указывается в том виде, который предоставляет отправляющая система.
Конкретный тип DNS-записи и её содержимое зависят от схемы настройки сервиса. Например, публичный ключ DKIM может публиковаться непосредственно в TXT-записи, а некоторые сервисы используют CNAME для делегирования DKIM-записи.
Шаг 3. Настройка почтового сервера или сервиса
Настройте отправляющую систему так, чтобы она добавляла DKIM-подпись к исходящим письмам.
Шаг 4. Проверка настройки DKIM
Проверьте, работает ли DKIM правильно:
- отправьте тестовый емейл на внешний почтовый ящик и проверьте результат DKIM в технических заголовках письма;
- проверьте опубликованную DNS-запись для используемого селектора, например с помощью
dig:
dig TXT default._domainkey.yourdomain.com- если для домена настроены DMARC-отчёты, их также можно использовать для контроля результатов DKIM-аутентификации.
Шаг 5. Поддержание DKIM
Следите за актуальностью DKIM-настроек. При смене почтового сервиса или отправляющей инфраструктуры проверяйте, что используются актуальные селекторы и ключи. Если сервис поддерживает ротацию DKIM-ключей, следуйте его рекомендациям по периодичности и процедуре замены.
Почему DKIM не проходит проверку: ошибки и решения
Если DKIM не проходит проверку, последовательно проверьте основные элементы настройки:
- Проверьте, опубликована ли нужная DNS-запись.
- Сверьте домен и селектор из заголовка
DKIM-Signatureс данными опубликованной записи. - Убедитесь, что опубликованный публичный ключ соответствует ключу, которым отправляющая система подписывает сообщения.
- Проверьте, не изменились ли подписанные части письма после формирования подписи.
- Отправьте тестовое письмо и проверьте результат DKIM в технических заголовках.
DKIM-запись не найдена (No DKIM record)
Почтовый сервер не может получить открытый ключ для проверки подписи. Это может произойти, если нужная DNS-запись не опубликована, указано неверное имя записи или используется другой селектор.
d=) и селектор (s=) из заголовка DKIM-Signature и проверьте соответствующую DNS-запись. Убедитесь, что она опубликована в нужной зоне и содержит данные, предоставленные отправляющей системой. При недавнем изменении DNS учитывайте TTL и время распространения изменений.Неверная DKIM-запись
Ошибки в опубликованных данных могут привести к сбою проверки. Например, открытый ключ в DNS может не соответствовать закрытому ключу, которым отправляющая система подписывает письма.
DKIM-подпись не проходит проверку (DKIM=fail)
Если запись опубликована, но подпись не проходит проверку, причиной может быть неправильный селектор или ключ, ошибка в настройке подписывающей системы либо изменение подписанных частей сообщения после создания подписи.
DKIM-Signature, соответствие ключей и путь письма после подписания. Если промежуточная система изменяет подписанные данные, это также может нарушить проверку.Конфликт записей для одного селектора
Для конкретного имени селектора принимающая система должна получить корректные данные ключа. Ошибочные или конфликтующие DNS-записи могут нарушить проверку.
Заключение
DKIM — технология email-аутентификации, которая связывает сообщение с доменом DKIM-подписи и проверяет целостность подписанных частей письма. Для этого отправляющая система создаёт цифровую подпись с помощью закрытого ключа, а принимающая проверяет её с помощью открытого ключа из DNS.
DKIM вместе с SPF и DMARC входит в систему аутентификации электронной почты. При корректном выравнивании доменов (DKIM alignment) успешная DKIM-проверка может обеспечить прохождение DMARC.


