Коротко. DKIM (DomainKeys Identified Mail) подписывает письма криптографически: почтовый сервер добавляет в заголовок цифровую подпись приватным ключом, а получатель проверяет её публичным ключом из вашей DNS. Настройка — это три шага: сгенерировать пару ключей, опубликовать публичный ключ TXT-записью по адресу селектор._domainkey.домен и включить подпись на почтовом сервере.
Как работает DKIM
При отправке сервер хэширует выбранные заголовки и тело письма, шифрует хэш приватным ключом и кладёт результат в заголовок DKIM-Signature. Получатель берёт селектор из подписи, запрашивает публичный ключ из DNS и проверяет, что письмо не подделано и не изменено в пути.
Шаг 1. Сгенерируйте пару ключей
Большинство провайдеров (Google Workspace, Microsoft 365, Mailgun) генерируют ключ автоматически и сразу дают готовую TXT-запись. Если делаете вручную:
openssl genrsa -out dkim_private.pem 2048
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem
# из публичного ключа берётся значение p= для DNS-записи
Шаг 2. Опубликуйте публичный ключ в DNS
Селектор — произвольное имя (например mail, s1, google), позволяющее иметь несколько ключей. Запись публикуется так:
selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."
# Проверка опубликованного ключа:
dig txt selector._domainkey.example.com
dig +short txt google._domainkey.example.com
Шаг 3. Включите подпись на сервере
- В Google Workspace: Apps → Gmail → Authenticate email → Generate new record → Start authentication.
- В Microsoft 365: панель Defender → DKIM → включить для домена.
- В транзакционных сервисах (Mailgun, SendGrid, Postmark): следуйте мастеру верификации домена.
Параметры DKIM-записи
| Тег | Значение | Назначение |
|---|---|---|
| v | DKIM1 | Версия (обязательно) |
| k | rsa | Тип ключа |
| p | base64-ключ | Публичный ключ |
| t | y | Тестовый режим (опционально) |
| (пусто p=) | — | Отзыв ключа |
Используйте ключ длиной 2048 бит. 1024-битные ключи всё ещё встречаются, но считаются слабыми и постепенно выводятся из доверия.
Не публикуйте приватный ключ в DNS — туда идёт только публичный (p=). Приватный остаётся на почтовом сервере и никому не передаётся.
Типичные ошибки
- Разбитая длинная TXT-запись — провайдеры DNS режут строку на части; склейте их без лишних кавычек.
- Неверный селектор — имя в DNS должно точно совпадать с тем, что в DKIM-Signature.
- Ключ не распространился — подождите TTL и проверьте через dig.
- Включили подпись, но забыли DNS — подпись есть, проверка проваливается.
Как enterno.io помогает с DKIM
Инструмент /email-check проверяет наличие DKIM-записи по указанному селектору, валидирует синтаксис ключа и подсказывает, если запись разбита, пуста или селектор не совпадает. Вместе с проверкой SPF и DMARC вы видите всю картину аутентификации в одном месте. enterno диагностирует — публикацию TXT в зоне выполняет владелец домена. Бесплатно — 48+ инструментов и DNS-проверка.
Частые вопросы
Что такое селектор в DKIM?
Селектор — это метка в имени DNS Lookup (selector._domainkey.домен), позволяющая держать несколько DKIM-ключей одновременно, например для разных сервисов или для ротации ключей.
Сколько DKIM-записей можно иметь?
Сколько угодно — по одной на селектор. Это удобно, чтобы каждый рассыльщик подписывал письма своим ключом.
Почему DKIM проходит, но письмо в спаме?
DKIM — лишь часть аутентификации. Проверьте также SPF, DMARC и репутацию IP/домена. Подробнее — почему письма уходят в спам.
Проверьте DKIM: запустите /email-check с вашим селектором и убедитесь, что ключ опубликован верно. См. также защиту от подделки писем.