Как пользоваться
- Создайте пару ключей на почтовом сервере или скопируйте открытый ключ из настроек DKIM у почтового провайдера.
- Укажите селектор, которым подписывает сервер, и свой домен.
- Вставьте открытый ключ: подойдут блок PEM, просто Base64 и старая запись вида
v=DKIM1; … p=…. - Скопируйте имя хоста и значение TXT в DNS-панель или строку для файла зоны BIND.
Как это работает
Запись строится по RFC 6376: первым идёт v=DKIM1, затем k= с типом ключа и p= с ключом в Base64. Необязательные теги: h=sha256 (принимать только подписи SHA-256) и t= с флагами y (тестирование) и s (домен i= подписи должен совпадать с d=, без поддоменов).
Ключ раскодируется, и его тип определяется по структуре DER:
- RSA: ключ SubjectPublicKeyInfo (PEM, начинающийся с
MIIB…) используется как есть. Ключ PKCS#1 (BEGIN RSA PUBLIC KEY) оборачивается в SubjectPublicKeyInfo — в таком виде он обычно и стоит в записях DKIM. Длина ключа — длина модуля. По RFC 8301 подписывающая сторона должна использовать не меньше 1024 бит и следует — не меньше 2048, поэтому более короткие ключи отклоняются, а для 1024 бит выводится предупреждение. - Ed25519: по RFC 8463 в
p=записывается сам ключ из 32 байт, поэтому из блока SubjectPublicKeyInfo берутся эти 32 байта.
Для файла зоны значение режется на строки по 255 символов: одна строка TXT вмещает не больше 255 байт.
Пример
Селектор mail, домен example.com и ключ RSA на 2048 бит из формы дают:
- имя хоста:
mail._domainkey.example.com; - значение:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA…IDAQAB— 410 символов; - файл зоны: две строки, 255 + 155 символов.
Советы
- Проверьте запись после публикации:
dig TXT mail._domainkey.example.com +shortдолжна вывести значение. - При смене ключа оставьте старый селектор опубликованным на несколько дней, чтобы письма, подписанные до смены, проходили проверку.
- DKIM лучше работает вместе с SPF и политикой DMARC.