Assine e-mails usando DKIM

há 5 anos De David Grudl  

DKIM (DomainKeys Identified Mail) é uma tecnologia para aumentar a confiabilidade dos e-mails, que também ajuda a detetar mensagens falsificadas. A mensagem enviada é assinada pelo servidor SMTP com a chave privada do domínio do remetente, e essa assinatura é armazenada no cabeçalho do e-mail. O servidor do destinatário compara essa assinatura com a chave pública armazenada nos registros DNS do domínio. Se a assinatura corresponder, prova-se que o e-mail realmente se originou do domínio do remetente e que a mensagem não foi modificada durante a transmissão.

Nette\Mail suporta DKIM desde a versão 3.1. O uso é muito simples:

$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 você pode usar o arquivo de configuração:

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

O seletor é qualquer string alfanumérica com letras minúsculas que faz parte do registro DNS.

Você pode gerar as chaves privada e pública usando um serviço online (por exemplo, easydmarc) ou localmente usando openssl:

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

Publique a chave pública criando um registro TXT no DNS do seu domínio, cujo nome será uma combinação do seletor, da string ._domainkey. e do domínio. No nosso exemplo, seria lovenette._domainkey.myweb.com. Em algumas administrações, o domínio já pode estar pré-preenchido.

O valor do registro será a concatenação da string v=DKIM1;t=s;k=rsa;p= e da chave pública, que você copia do arquivo dkim.pub. Remova os comentários envolventes -----BEGIN PUBLIC KEY----- e junte as linhas em uma única linha longa:

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

Para verificar a configuração do DKIM, você pode usar, por exemplo, o serviço MailTester.