Pular para o conteúdo
ecdsa.com
OpenDKIM (Authentication-Results header added by the opendkim milter); mailauth reports the same as "bad signature"DKIM

Mensagem de erro

dkim=fail reason="signature verification failed"

Também aparece como

  • dkim=fail (bad signature)

O OpenDKIM grava `dkim=fail reason="signature verification failed"` tanto para alterações nos cabeçalhos quanto no corpo (reproduzido com o OpenDKIM 2.11.0). O mailauth diferencia as duas: “bad signature” para os cabeçalhos, “body hash did not verify” para o corpo.

O que significa

O servidor receptor encontrou a chave DKIM e calculou a assinatura sobre a mensagem tal como ela chegou, e o resultado não conferiu: os cabeçalhos assinados (ou, no caso do OpenDKIM, também o corpo) mudaram depois que o remetente assinou a mensagem, ou a chave publicada não forma par com a chave de assinatura. O DKIM assina os bytes exatos após a canonicalização, então qualquer reescrita feita por um servidor de retransmissão — uma tag no assunto, um rodapé, uma parte MIME recodificada — quebra a assinatura. Para o DMARC, isso conta como uma verificação DKIM com falha.

Por que acontece

Como corrigir

  1. 1.

    Comparar os cabeçalhos assinados com os recebidos

    A tag `h=` lista o que foi assinado. Compare esses cabeçalhos na cópia recebida com uma cópia obtida no remetente (pasta de enviados).

    bash
    # Which headers did the signature cover, and what do they look like now?
    grep -i "^DKIM-Signature" -A4 received.eml | grep -o "h=[^;]*"
    grep -iE "^(From|To|Subject|Date|Message-ID|Content-Type):" received.eml
  2. 2.

    Para listas e serviços de encaminhamento: ARC e nova assinatura

    É recomendável que intermediários que precisam modificar as mensagens adicionem cabeçalhos ARC e assinem com o próprio domínio, para que os receptores ainda consigam avaliar a autenticação original.

    text
    # Mailing list / forwarder: add ARC and re-sign with the list's own domain (Mailman 3 example)
    [ARC]
    enabled: yes
    authserv_id: lists.example.org
    domain: lists.example.org
    selector: arc2026
    privkey: /etc/mailman3/arc.private
  3. 3.

    Verificar se a chave no DNS corresponde à chave privada

    O `opendkim-testkey` confirma que o registro publicado para o seletor corresponde à chave que o signatário usa.

    bash
    opendkim-testkey -d example.com -s sel -k /etc/opendkim/keys/sel.private -vvv   # DNS record matches the private key?

Erros relacionados

Ver toda a base de erros de assinatura