Podpisywanie e-maili za pomocą DKIM

5 lat temu przez David Grudl  

DKIM (DomainKeys Identified Mail) to technologia zwiększająca wiarygodność e-maili, która pomaga również w wykrywaniu sfałszowanych wiadomości. Wysłana wiadomość jest podpisywana przez serwer SMTP prywatnym kluczem domeny nadawcy, a ten podpis jest przechowywany w nagłówku e-maila. Serwer odbiorcy porównuje ten podpis z kluczem publicznym przechowywanym w rekordach DNS domeny. Jeśli podpis się zgadza, dowodzi to, że e-mail rzeczywiście pochodzi z domeny nadawcy i że wiadomość nie została zmodyfikowana podczas przesyłania.

Nette\Mail wspiera DKIM od wersji 3.1. Użycie jest bardzo proste:

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

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

Możesz również skorzystać z pliku konfiguracyjnego:

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

Selektor to dowolny ciąg alfanumeryczny pisany małymi literami, który jest częścią rekordu DNS.

Klucz prywatny i publiczny można wygenerować za pomocą usług online (np. easydmarc) lub lokalnie za pomocą openssl:

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

Opublikuj klucz publiczny, tworząc rekord TXT w DNS swojej domeny, którego nazwa będzie połączeniem selektora, ciągu ._domainkey. i domeny. W naszym przykładzie byłoby to lovenette._domainkey.myweb.com. W niektórych panelach administracyjnych domena jest już wstępnie wypełniona.

Wartością rekordu będzie połączenie ciągu v=DKIM1;t=s;k=rsa;p= i klucza publicznego, który skopiuj z pliku dkim.pub. Usuń otaczające komentarze -----BEGIN PUBLIC KEY----- i połącz linie w jedną długą:

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

Do sprawdzenia ustawień DKIM można użyć na przykład usługę MailTester.

David Grudl An artificial intelligence and web technology specialist, creator of the Nette Framework and other popular open-source projects. He writes for Uměligence, phpFashion, and La Trine blogs. He conducts AI training workshops and hosts the Tech Guys show. He's passionate about making artificial intelligence accessible through clear, practical explanations. Creative and pragmatic, he has a keen eye for real-world technology applications.