Firmare le e-mail con DKIM

4 anni fa Da David Grudl  

DKIM (DomainKeys Identified Mail) è una tecnologia di posta elettronica affidabile che aiuta anche a rilevare i messaggi falsificati. Il messaggio inviato viene firmato dal server SMTP con la chiave privata del dominio del mittente e questa firma viene memorizzata nell'intestazione dell'e-mail. Il server del destinatario confronta questa firma con la chiave pubblica memorizzata nei record DNS del dominio. La corrispondenza della firma dimostra che l'e-mail proviene effettivamente dal dominio del mittente e che il messaggio non è stato modificato durante la trasmissione.

Nette\Mail supporta il DKIM dalla versione 3.1. L'utilizzo è molto semplice:

$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);

Oppure si può utilizzare il file di configurazione:

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

Il selettore è una qualsiasi stringa alfanumerica minuscola che fa parte del record DNS.

È possibile generare una coppia di chiavi private e pubbliche utilizzando openssl:

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

La chiave pubblica viene pubblicata creando un record TXT nel DNS per il nome host creato concatenando il selettore, la stringa letterale ._domainkey. e il nome del dominio. Nel nostro esempio, si tratta di lovenette._domainkey.myweb.com. In alcune amministrazioni il dominio è già precompilato.

Il valore del record TXT può essere creato concatenando la stringa letterale v=DKIM1;t=s;k=rsa;p= e la chiave pubblica copiata dal file dkim.pub. Rimuovere le righe circostanti -----BEGIN PUBLIC KEY----- e racchiudere la chiave in un'unica lunga riga:

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

È possibile utilizzare il servizio MailTester per verificare le impostazioni DKIM.