Підписуйте електронні листи за допомогою 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.