Módulo 4 · 4.3
DKIM na prática: selectores, chaves e serviços
Módulo 4: Capacidade de entrega: SPF, DKIM e DMARC na prática · Tempo de leitura: 12 minutos
Objetivo de aprendizagem: Após esta lição, saberá interpretar uma cabeçalho DKIM-Signature, configurar o DKIM com o seu próprio domínio em qualquer serviço de envio, verificar se um selector funciona e explicar como substituir chaves em segurança.
Conceitos-chave: DKIM-Signature, d= (domínio assinante), s= (selector), h= (cabeçalhos assinados), bh= e b=, canonicalização (c=), <selector>._domainkey.<domínio>, TXT com p= ou CNAME para o serviço, comprimento de chave 2048 bits (RFC 8301), fragmentos de 255 caracteres, ed25519 (RFC 8463), substituição de chaves, p= vazio (revogada), DKIM e redirecionamento
Porque é que o DKIM é o mais importante dos três
O SPF indica quais servidores podem enviar correio, mas falha com o redirecionamento e observa o Return-Path, que em muitos serviços não é o seu. O DKIM coloca uma assinatura na própria mensagem. Essa assinatura sobrevive ao redirecionamento (desde que a mensagem não seja alterada) e está associada a um domínio que você escolhe. Por isso, na prática, o DKIM é muitas vezes o único mecanismo que faz o DMARC ter êxito em newsletters, faturas emitidas por um programa de contabilidade e correio redirecionado.
A base (como a chave consta no DNS, o que é um selector) encontra-se no curso de DNS, lição 4.4. Aqui vamos mais além: o que consta exatamente numa assinatura e como se configura o DKIM em cada serviço?
Interpretar uma assinatura
Abra os cabeçalhos de uma mensagem que tenha recebido (lição 1.5). No topo, se a mensagem estiver assinada, encontrará algo como:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=x;
t=1762588800; h=from:to:subject:date:message-id:mime-version:content-type;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=Gm7yW3q...longa sequência de caracteres...Qx9A==| Etiqueta | Significado |
|---|---|
v=1 | Versão do DKIM |
a=rsa-sha256 | Algoritmo: chave RSA, SHA-256. Também possível: ed25519-sha256 |
c=relaxed/relaxed | Canonicalização: com que rigor são tratadas pequenas alterações (espaços, maiúsculas nos nomes dos cabeçalhos), para os cabeçalhos e para o texto. relaxed é o habitual e mais tolerante do que simple |
d=example.com | O domínio assinante. Este domínio responde pela mensagem. O DMARC compara este valor com o endereço De |
s=x | O selector: qual chave desse domínio foi utilizada |
t= | Momento da assinatura (segundos desde 1970) |
h= | Quais cabeçalhos foram assinados. O from tem de estar sempre incluído |
bh= | Uma impressão digital (hash) do texto da mensagem |
b= | A própria assinatura |
O destinatário obtém a chave pública em <s>._domainkey.<d>, neste caso x._domainkey.example.com, e verifica se b= corresponde aos cabeçalhos indicados em h= e à impressão digital bh=. Se, durante o percurso, uma única letra do texto ou de um cabeçalho assinado for alterada, a verificação falha.
Em Authentication-Results vê o resultado, por exemplo dkim=pass header.d=example.com header.s=x. Uma mensagem pode ter várias assinaturas, por exemplo uma do seu domínio e outra do próprio serviço. Para o DMARC, só conta uma assinatura cujo d= corresponda ao seu domínio De.
Cada serviço com o seu próprio selector
Um domínio pode ter muitas chaves DKIM em simultâneo, cada uma com o seu próprio selector. É exatamente esse o objetivo: cada serviço que envia correio em seu nome assina com uma chave própria.
| Remetente | Selector (exemplo) | Como consta no DNS |
|---|---|---|
| Servidor de correio de alojamento | x ou default | TXT com a chave, criado pelo painel |
| Microsoft 365 | selector1, selector2 | dois registos CNAME para a Microsoft |
| Google Workspace | google (predefinido) | TXT com uma chave que você gera na consola de administração |
| Serviço de newsletters | por exemplo k2, k3, mte1 | normalmente registos CNAME para o serviço |
TXT ou CNAME?
- Com um registo TXT, é você quem coloca a chave pública no seu DNS. Se o serviço quiser uma nova chave, terá de ser você a atualizar o registo.
- Com um registo CNAME, encaminha o selector para um nome junto do serviço, por exemplo
k2._domainkey.example.com CNAME dkim2.mailer.example.O serviço gere então a chave e pode substituí-la sem que você tenha de fazer nada. Por isso, os grandes serviços optam pelo CNAME, utilizando muitas vezes dois: assim podem alternar entre uma chave ativa e uma nova chave.
Atenção: um CNAME não pode coexistir com outro registo no mesmo nome. Se já existir um TXT em selector1._domainkey, remova-o.
O mais importante: ativar o DKIM no serviço
Em muitos serviços, o DKIM com o seu próprio domínio não está ativo por predefinição. Esses serviços assinam então com o seu próprio domínio (d=mailer.example). A mensagem fica assinada, mas não alinhada com o seu endereço De. Para o DMARC, isso não conta. Na administração do serviço, esta opção chama-se muitas vezes "verificar domínio", "verificação de domínio", "autenticação" ou "domínio de remetente próprio". Só depois de configurar os registos e de ativar a opção no serviço é que este passa a assinar com d=example.com.
Chaves: comprimento, fragmentos e algoritmo
- Comprimento. A RFC 8301 estabelece: pelo menos 1024 bits, devendo os remetentes utilizar pelo menos 2048 bits. Utilize 2048. Uma chave de 512 bits é considerada inválida pelos destinatários.
- Fragmentos de 255 caracteres. Um registo TXT é composto por sequências de caracteres com um máximo de 255 caracteres. Uma chave de 2048 bits tem cerca de 400 caracteres e não cabe numa única sequência. O registo é então composto por duas ou mais sequências consecutivas (
"v=DKIM1; k=rsa; p=MIIBIj..." "...IDAQAB"), que o destinatário junta. A maioria dos painéis faz isto automaticamente. Se algo correr mal, obtém uma chave truncada e todas as assinaturas falham. Copie, por isso, sempre a chave na íntegra, sem espaços ou aspas adicionais a meio. - ed25519 (RFC 8463) é um algoritmo mais moderno, com chaves curtas. Nem todos os destinatários ainda o verificam. Quem o utiliza assina, por isso, com duas assinaturas: uma RSA e uma ed25519.
Substituir uma chave
É boa prática substituir uma chave de tempos a tempos, e sobretudo se suspeitar que a chave privada foi comprometida (por exemplo, após uma invasão do servidor ou a saída de um administrador). Proceda assim:
- Crie uma nova chave sob um novo selector, por exemplo
s2026, e coloque a chave pública no DNS. - Aguarde até o registo estar visível em toda a parte (o TTL, ver curso de DNS, lição 6.1).
- Faça com que o servidor passe a assinar com o novo selector.
- Mantenha a chave antiga ainda por alguns dias: correio que já estava a caminho ou que volta a ser verificado ainda faz referência a ela.
- Revogue a chave antiga esvaziando o
p=(v=DKIM1; p=), ou remova o registo.
Nos serviços com registos CNAME, é o próprio serviço que trata disto.
O que faz o DKIM falhar
- A mensagem é alterada durante o percurso: uma lista de distribuição que coloca
[nome-da-lista]no assunto ou acrescenta um rodapé, um antivírus que adiciona uma linha no fim da mensagem, um servidor de redirecionamento que converte a formatação. - Chave incorreta ou truncada no DNS.
- O selector não existe: um erro de escrita no nome, ou
selector1._domainkey.example.com.example.com(o nome de domínio duplicado, porque o painel já o acrescenta automaticamente). - Chave revogada (
p=vazio) enquanto o servidor ainda assina com esse selector.
Verificar se funciona
- Envie uma mensagem a partir do serviço para um endereço no Gmail ou Outlook.com.
- Abra os cabeçalhos e procure o
DKIM-Signature: anoted=es=. - Verifique em
Authentication-Resultsse constadkim=pass, e seheader.d=corresponde ao seu domínio. - Consulte o selector:
dig TXT s._domainkey.example.com(ou com uma ferramenta online). Deve existir ump=com uma chave extensa, ou um CNAME que remeta para um registo desse tipo.
Na prática: assim se apresenta num painel
Num pacote de alojamento da WebOké, o DKIM está ativo por predefinição, com o selector x: o registo chama-se x._domainkey.<oseudomínio>. No DirectAdmin, vê-o em Administração de DNS; se o seu DNS estiver junto de outro fornecedor, copie esse registo para lá. No O meu WebOké, o cartão Definir e-mail mostra o valor que deve constar e se este é encontrado. Noutros fornecedores, o selector tem outro nome (default, mail, dkim), mas encontra-o da mesma forma: no painel ou no s= de uma mensagem assinada.
Resumo
- O DKIM é a verificação que sobrevive ao redirecionamento e que você associa, por serviço, ao seu próprio domínio; para o DMARC, só conta uma assinatura com o seu domínio em
d=. - No
DKIM-Signatureencontrad=(domínio) es=(selector); a chave encontra-se em<s>._domainkey.<d>. - Cada serviço recebe o seu próprio selector; os registos CNAME permitem que o serviço substitua as chaves por si próprio. Certifique-se de que ativa mesmo o DKIM com o seu próprio domínio no serviço.
- Utilize 2048 bits; tenha atenção a chaves truncadas ao copiar.
- Substitua uma chave com um novo selector e só depois revogue a antiga.
Quiz
Exercício
Exercício Z4.3: Verificar um selector DKIM. Envie uma mensagem a partir do seu próprio domínio (ou de um serviço que envie correio em seu nome) para um endereço próprio noutro fornecedor. Abra os cabeçalhos e preencha os valores de d= e s= do DKIM-Signature, bem como o que consta em Authentication-Results junto a dkim=. O programa consulta o selector em tempo real, segue um eventual CNAME, verifica a chave (presente, não vazia, comprimento) e indica se d= está alinhado com o domínio que você indica como remetente.
Para saber mais
Os passos descritos nestes artigos aplicam-se aos painéis da WebOké; junto de outros fornecedores o funcionamento é semelhante.
- Curso gratuito de DNS 4.4: DKIM: a assinatura por baixo do seu e-mail
- Manual DirectAdmin 5.8: Ativar e verificar o DKIM
- Configurar o DKIM quando o DNS está num servidor externo
- Manual do WebOké 6.7: O cartão Configurar e-mail (MX, SPF, DKIM, DMARC)
- RFC 6376 (DKIM), RFC 8301 (comprimento de chave e algoritmos), RFC 8463 (ed25519)
