Firmar correos electrónicos con DKIM

hace 5 años por David Grudl  

DKIM (DomainKeys Identified Mail) es una tecnología de correo electrónico de confianza que también ayuda a detectar mensajes falsificados. El mensaje enviado es firmado por el servidor SMTP con la clave privada del dominio del remitente y esta firma se almacena en la cabecera del correo electrónico. El servidor del destinatario compara esta firma con la clave pública almacenada en los registros DNS del dominio. Al cotejar la firma, se demuestra que el correo electrónico procede realmente del dominio del remitente y que el mensaje no ha sido modificado durante su transmisión.

Nette\Mail soporta DKIM desde la versión 3.1. El uso es muy sencillo:

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

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

O puede utilizar el archivo de configuración:

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

El selector es cualquier cadena alfanumérica en minúsculas que forme parte del registro DNS.

Puede generar un par de claves privada y pública utilizando openssl:

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

La clave pública se publica creando un registro TXT en el DNS para el nombre de host creado concatenando el selector, la cadena literal ._domainkey. y el nombre de dominio. Utilizando nuestro ejemplo, sería lovenette._domainkey.myweb.com. En algunas administraciones, el dominio ya está rellenado previamente.

El valor del registro TXT puede crearse concatenando la cadena literal v=DKIM1;t=s;k=rsa;p= y la clave pública que copie del archivo dkim.pub. Elimine las líneas -----BEGIN PUBLIC KEY----- circundantes y envuelva la clave en una sola línea larga:

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

Puede utilizar el servicio "MailTester:https://www.mail-tester.com/spf-dkim-check " para comprobar su configuración DKIM.