Что такое DKIM-запись?
DKIM (DomainKeys Identified Mail, RFC 6376) добавляет цифровую подпись к каждому письму, которое отправляет ваш сервер. Подпись создаётся закрытым ключом, который хранится на сервере. Соответствующий открытый ключ публикуется в DNS как TXT-запись по адресу selector._domainkey.yourdomain.com, и получатели запрашивают его, чтобы убедиться, что письмо действительно пришло с вашего домена и не было изменено по пути.
Селектор представляет собой просто метку, которую вы выбираете сами, например default или s1. Он позволяет одному домену публиковать несколько ключей одновременно: по одному на сервис или на поколение ключа. Действительная подпись DKIM от вашего собственного домена также позволяет письму пройти DMARC, когда SPF не выравнивается, например после пересылки.

Нужно ли генерировать собственный ключ DKIM?
Часто нет. Google Workspace создаёт ключ за вас (консоль администратора, Приложения, Google Workspace, Gmail, Аутентификация электронной почты), а Microsoft 365 использует две CNAME-записи, selector1._domainkey и selector2._domainkey, которые указывают на ключи под управлением Microsoft. Большинство сервисов рассылок и транзакционной почты тоже выдают собственные записи.
Собственная пара ключей нужна, когда почтовый сервер работает у вас, например Postfix с OpenDKIM или rspamd либо Exim, или когда приложение или релей просит загрузить закрытый ключ. Именно для этого и создан этот генератор.
Advertisement
Как сгенерировать ключи DKIM и опубликовать запись
Селектор может быть любым набором букв, цифр и дефисов. Селектор с датой, например s2026, упрощает отслеживание ротации ключей.
RSA 2048 бит подходит почти всем. Пара ключей создаётся в вашем браузере сразу при загрузке страницы и заново при смене типа.
Скачайте его и установите на почтовый сервер. Он нигде не хранится, поэтому, если вы его потеряете, понадобится новая пара.
Добавьте TXT-запись с хостом selector._domainkey и сгенерированным значением, отправьте себе письмо и проверьте его с помощью проверки DKIM.
Синтаксис DKIM-записи
Запись ключа DKIM представляет собой список пар тег=значение, разделённых точкой с запятой. Обязателен только p=, но публикуйте также v и k.
Обозначает запись как ключ DKIM. Если тег указан, он должен стоять первым.
Алгоритм ключа. Если тег отсутствует, по умолчанию используется rsa.
Открытый ключ в base64. Пустой p= означает, что ключ отозван и подписи, сделанные им, не проходят проверку.
Просит получателей считать, что домен тестирует DKIM. Удалите его, когда подписи начнут проходить проверку.
Строгий режим: идентификатор i= в подписи должен использовать ровно домен d=, а не его поддомен.
Ограничивают алгоритмы хеширования (h=sha256) или сервис, для которого предназначен ключ (s=email). В большинстве записей их нет.
Advertisement
RSA 2048, 1024, 4096 или Ed25519
RSA 2048 бит: рекомендуемый размер. RFC 8301 говорит, что подписывающим следует использовать не менее 2048 бит. Значение TXT занимает около 410 символов.
RSA 1024 бит: всё ещё проверяется и является минимумом, который принимают получатели, но по современным меркам это слабый ключ. Подписи с более короткими ключами недействительны. Используйте его, только если ваш DNS-хостинг не может хранить более длинное значение.
RSA 4096 бит: получатели обязаны проверять ключи до 4096 бит, но значение занимает около 750 символов, и некоторые DNS-панели и старые системы плохо с ним справляются. По сравнению с 2048 выигрыш невелик.
Ed25519: современный и гораздо более короткий ключ (вся запись занимает около 66 символов, RFC 8463). Его проверяют ещё не все получатели, поэтому подписывайте письма и ключом RSA, под вторым селектором.
Почему DKIM-запись разбита на несколько строк?
Одна строка TXT вмещает не более 255 символов, а значение DKIM на 2048 бит длиннее. DNS решает это так: значение хранится в виде нескольких строк в кавычках, которые получатели склеивают обратно.
Большинство DNS-панелей принимают длинное значение как есть и разбивают его сами. Amazon Route 53 и файлы зоны BIND требуют ввести разбитый вариант вручную, и именно его даёт кнопка для файла зоны (в Route 53 вставляйте только строки в кавычках, в одну строку). Не добавляйте пробелы или переносы строк внутрь ключа и не размещайте каждую половину в отдельной записи.
Advertisement
Установка ключа на почтовый сервер
Сохраните закрытый ключ как default.private (с вашим собственным селектором), сделайте его доступным для чтения только службе подписи и укажите ей путь к файлу. Пример OpenDKIM для example.com с селектором default:
sudo mkdir -p /etc/opendkim/keys/example.com
sudo mv default.private /etc/opendkim/keys/example.com/
sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/default.private
sudo chmod 600 /etc/opendkim/keys/example.com/default.privatedefault._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private*@example.com default._domainkey.example.comopenssl genrsa -out default.private 2048
openssl rsa -in default.private -pubout -out default.publicopendkim-genkey -b 2048 -d example.com -s defaultКак выполнить ротацию ключей DKIM
Сгенерируйте новую пару ключей под новым селектором, например s2027.
Опубликуйте новую TXT-запись и дождитесь, пока она начнёт разрешаться везде.
Переключите почтовый сервер на подпись с новым селектором.
Оставьте старую запись примерно на неделю, пока подписанные ею письма не будут доставлены и проверены.
Затем удалите старую запись или опубликуйте её с пустым
p=, чтобы отозвать ключ.
Advertisement
Другие инструменты для аутентификации почты
DKIM является одной из трёх записей, которые проверяют получатели. Настройте весь набор:
Найдите опубликованный ключ по селектору и проверьте его синтаксис и размер.
Соберите SPF-запись для своих провайдеров с подсчётом DNS-запросов в реальном времени.
Создайте политику DMARC, которая использует результаты SPF и DKIM.
Узнайте, прошло ли реальное письмо проверки DKIM, SPF и DMARC.