DKIM (DomainKeys Identified Mail) — это технология аутентификации электронной почты, которая позволяет получателю проверить, действительно ли письмо было отправлено от имени указанного домена и не было ли оно изменено по пути.

  • Отправляющий сервер формирует заголовки письма и его тело.
  • Вычисляется хеш от указанных заголовков и тела.
  • Хеш подписывается закрытым ключом.
  • В письмо добавляется заголовок DKIM-Signature, содержащий подпись.
  • Получатель извлекает подпись, получает открытый ключ из DNS и проверяет её.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com; s=s1;
 h=from:to:subject:date;
 bh=QW6fV5OSn...;
 b=MT7XN3kpv...;

DKIM-запись добавляется в DNS домена как TXT-запись по следующему имени:

селектор._domainkey.домен

Пример:

s1._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw..."
Параметр Назначение Пример значения
v Версия протокола DKIM v=DKIM1
k Тип криптографического ключа k=rsa
p Открытый ключ в base64 p=MIIBIjAN…

Дополнительно можно использовать (реже):

t Тестовый режим (только отчётность) t=y
n Комментарий для администраторов n=тестовая подпись

С помощью OpenSSL:

openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key

Преобразование в формат DNS:

openssl rsa -in private.key -pubout -outform PEM | \
sed '1d;$d' | tr -d '\n' > dkim.txt

* Через консоль:

dig TXT s1._domainkey.example.com

* Онлайн-инструменты:

  • Используйте длину ключа 2048 бит (не менее 1024).
  • Придумывайте уникальные селекторы для разных почтовых сервисов (например, `google`, `m365`, `mailjet`).
  • Ротируйте ключи регулярно (пример: раз в год).
  • Убедитесь, что почтовый сервер корректно подписывает все исходящие письма.
  • Используйте DKIM вместе с SPF и DMARC для максимальной защиты.