Подписывайте электронные письма с помощью DKIM

5 лет назад от David Grudl  

DKIM (DomainKeys Identified Mail) — это технология повышения доверия к электронной почте, которая также помогает выявлять поддельные сообщения. Отправленное сообщение подписывается SMTP-сервером с использованием закрытого ключа домена отправителя, и эта подпись сохраняется в заголовке письма. Сервер получателя сравнивает эту подпись с открытым ключом, хранящимся в DNS-записях домена. Соответствие подписи доказывает, что письмо действительно пришло из домена отправителя и что сообщение не было изменено во время передачи.

Nette\Mail поддерживает DKIM начиная с версии 3.1. Использование очень простое:

$options = [
	'domain' => 'myweb.com',
	'selector' => 'lovenette',
	'privateKey' => file_get_contents('dkim.priv'),
//	'passPhrase' => '****',
	'testMode' => true,
];

$mailer = new Nette\Mail\SendmailMailer; // или SmtpMailer
$mailer->setSigner(new Nette\Mail\DkimSigner($options));
$mailer->send($mail);

Или вы можете использовать конфигурационный файл:

mail:
	dkim:
		domain: myweb.com
	    selector: lovenette
	    privateKey: %appDir%/cert/dkim.priv
	    passPhrase: ...
	    testMode: ...

Селектор — это произвольная буквенно-цифровая строка в нижнем регистре, которая является частью DNS-записи.

Вы можете сгенерировать закрытый и открытый ключи с помощью одного из онлайн-сервисов (например, easydmarc) или локально с помощью openssl:

openssl genrsa -out dkim.priv 1024
openssl rsa -in dkim.priv -pubout > dkim.pub

Опубликуйте открытый ключ, создав TXT-запись в DNS вашего домена, имя которой будет состоять из селектора, строки ._domainkey. и домена. В нашем примере это будет lovenette._domainkey.myweb.com. В некоторых панелях администрирования домен может быть уже предзаполнен.

Значением записи будет строка v=DKIM1;t=s;k=rsa;p=, объединенная с открытым ключом, который вы скопируете из файла dkim.pub. Удалите обрамляющие комментарии -----BEGIN PUBLIC KEY----- и объедините строки в одну длинную:

v=DKIM1;t=s;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDi5y95Mi8FZ8LOSmi7nA/EFhn4a4/Zq3BnnmPFdu1IvduDwMGRrRW5V9FKjXvr4AnUq7eMLRtEdWYRpR9BXLdCWiJ2N4yKJG7SEEir8DMYOGGeqJZoR/kWFiG++GW++sdhfukFflPusJjrWr+4Pc4/qxMSrqUk/rVdsSlTDDRy/QIDAQAB

Для проверки настроек DKIM вы можете использовать, например, сервис MailTester.