Assinatura DKIM
DKIM (DomainKeys Identified Mail) é um mecanismo de autenticação que permite ao servidor de destino verificar que o e-mail foi enviado por um servidor autorizado pelo domínio do remetente.
Como o mxout assina
O mxout usa RSA-SHA256 com canonicalização relaxed/relaxed. RSA-2048 é o padrão escolhido por compatibilidade universal: praticamente todos os MTAs receptores suportam esse algoritmo e tamanho de chave.
A canonicalização relaxed/relaxed normaliza espaços e capitalização de cabeçalhos e do corpo antes de calcular o hash. Isso torna a assinatura robusta a alterações superficiais feitas por servidores intermediários (como adicionar espaços em headers).
Headers assinados
O mxout assina os seguintes headers:
From
To
Subject
Date
Message-IDEsses campos identificam o e-mail de forma única e cobrem os dados que o receptor humano vê. Assinar apenas esses headers (em vez de todos) reduz a chance de quebra por headers adicionados em trânsito.
Por que o mxout gera Date e Message-ID antes de assinar
O mxout gera o Message-ID (formato <unixts.token@dominio-do-from>) e o Date como parte do processo de montagem, antes de calcular a assinatura DKIM. Se esses campos fossem gerados depois ou pelo cliente, haveria dois problemas:
- A assinatura cobriria campos ausentes ou incorretos.
- Servidores intermediários poderiam injetar seus próprios valores, invalidando a assinatura.
Ao controlar esses campos internamente, o mxout garante que a assinatura cubra exatamente o que será entregue.
Kit DKIM
Cada domínio configurado no mxout tem um kit com dois campos:
{
"selector": "s1",
"key_path": "/etc/mxout/keys/exemplo.com.pem"
}selector: nome da subdivisão DNS onde a chave pública está publicada.key_path: caminho para a chave privada RSA-2048 em formato PKCS#8 PEM no servidor.
A chave privada nunca sai do servidor. Ela é lida em tempo de execução para assinar cada e-mail, mas não é transmitida nem exposta via API.
Publicação da chave pública no DNS
O receptor autentica a assinatura buscando a chave pública no DNS do domínio. O registro deve ser publicado como:
<selector>._domainkey.<dominio> TXT "v=DKIM1; k=rsa; p=<chave-pública-base64>"Exemplo para o domínio exemplo.com com selector s1:
s1._domainkey.exemplo.com TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."O valor de p é a chave pública RSA-2048 codificada em base64, sem cabeçalho PEM.
Como o receptor valida
- O MTA receptor lê o header
DKIM-Signaturedo e-mail recebido. - Extrai o
selectore o domínio (d=) do header. - Consulta
<selector>._domainkey.<dominio>no DNS e obtém a chave pública. - Recalcula o hash dos headers assinados com a canonicalização indicada.
- Verifica a assinatura usando a chave pública.
Se a verificação passar, o e-mail é autenticado como enviado por um servidor com acesso à chave privada do domínio.
Próximos passos
- Configurar DNS — como publicar o registro TXT da chave pública.
- mxout-keygen — ferramenta para gerar o par de chaves RSA-2048.