Подписывайте электронные письма с помощью 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.

David Grudl Open-source creator and AI specialist who opens doors to the world of artificial intelligence. His projects including Nette and Texy! power websites you visit daily. He contributes to Uměligence and La Trine while hosting Tech Guys. Through AI workshops, he champions technology that genuinely improves people's lives.