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.