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.

David Grudl A web developer since 1999 who now specializes in artificial intelligence. He's the creator of Nette Framework and libraries including Texy!, Tracy, and Latte. He hosts the Tech Guys podcast and covers AI developments on Uměligence. His blog La Trine earned a Magnesia Litera award nomination. He's dedicated to AI education and approaches technology with pragmatic optimism.