Signer les emails avec DKIM

il y a 5 ans par David Grudl  

DKIM (DomainKeys Identified Mail) est une technologie visant à accroître la fiabilité des e-mails, qui aide également à détecter les messages falsifiés. Le message envoyé est signé par le serveur SMTP avec la clé privée du domaine de l'expéditeur, et cette signature est stockée dans l'en-tête de l'e-mail. Le serveur du destinataire compare cette signature avec la clé publique stockée dans les enregistrements DNS du domaine. Si la signature correspond, cela prouve que l'e-mail provient bien du domaine de l'expéditeur et qu'il n'a pas été modifié pendant la transmission.

Nette\Mail prend en charge DKIM depuis la version 3.1. L'utilisation est très simple :

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

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

Ou vous pouvez utiliser un fichier de configuration :

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

Le sélecteur est une chaîne alphanumérique arbitraire en minuscules qui fait partie de l'enregistrement DNS.

Vous pouvez générer les clés privée et publique à l'aide de services en ligne (par exemple, easydmarc) ou localement à l'aide d'openssl :

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

Publiez la clé publique en créant un enregistrement TXT dans le DNS de votre domaine, dont le nom sera une combinaison du sélecteur, de la chaîne ._domainkey. et du domaine. Dans notre exemple, ce serait lovenette._domainkey.myweb.com. Dans certaines administrations, le domaine peut être pré-rempli.

La valeur de l'enregistrement sera la concaténation de la chaîne v=DKIM1;t=s;k=rsa;p= et de la clé publique, que vous copiez depuis le fichier dkim.pub. Supprimez les commentaires enveloppants -----BEGIN PUBLIC KEY----- et joignez les lignes en une seule longue ligne :

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

Pour vérifier votre configuration DKIM, vous pouvez utiliser par exemple le service MailTester.

David Grudl Programmer, blogger, and AI evangelist who created the Nette Framework powering hundreds of thousands of websites. He explores artificial intelligence on Uměligence and web development on phpFashion. Weekly, he hosts Tech Guys and teaches people to master ChatGPT and other AI tools. He's passionate about transformative technologies and excels at making them accessible to everyone.