DKIM (DomainKeys Identified Mail) ajoute une signature cryptographique à chaque email sortant. Le serveur de réception peut vérifier que le message n’a pas été modifié en transit et qu’il provient bien d’un expéditeur autorisé. C’est le deuxième pilier de l’authentification email, après SPF.

Comment DKIM fonctionne, en simple

Imaginez que vous envoyez une lettre recommandée avec un sceau de cire. Le destinataire peut vérifier que le sceau n’a pas été brisé (le message est intact) et que le sceau correspond bien à votre blason (vous êtes l’expéditeur légitime).

DKIM fait exactement ça, mais numériquement :

  1. À l’envoi : votre serveur mail calcule une empreinte (hash) du message et la chiffre avec une clé privée (que vous seul possédez)
  2. La signature est ajoutée dans un en-tête DKIM-Signature de l’email
  3. À la réception : le serveur destinataire récupère votre clé publique dans le DNS et déchiffre la signature
  4. Vérification : si le hash recalculé correspond, le message est authentique et intact

Anatomie d’un en-tête DKIM-Signature

DKIM-Signature: v=1; a=rsa-sha256; d=votredomaine.com; s=selector1;
    c=relaxed/relaxed; q=dns/txt; t=1711234567;
    h=from:to:subject:date:message-id;
    bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
    b=AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk...
TagSignification
v=1Version DKIM
a=rsa-sha256Algorithme de signature (RSA + SHA-256)
d=Domaine signataire, c’est lui qui doit s’aligner avec le From: pour DMARC
s=Sélecteur, identifie quelle clé publique utiliser
c=relaxed/relaxedCanonicalisation : comment normaliser le message avant le hash
h=Liste des en-têtes signés
bh=Hash du corps du message
b=La signature elle-même

Canonicalisation : simple vs relaxed

  • Simple : le message doit être identique octet par octet. Le moindre espace ajouté par un relais casse la signature.
  • Relaxed : tolère les variations mineures (espaces, sauts de ligne, casse des en-têtes). C’est le choix recommandé.

L’enregistrement DNS DKIM

La clé publique est publiée dans un record TXT à l’adresse :

selector1._domainkey.votredomaine.com

Le contenu ressemble à :

v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
TagRôle
v=DKIM1Version
k=rsaType de clé (RSA ou Ed25519)
p=Clé publique encodée en Base64
t=s(optionnel) Mode strict, le domaine d= doit exactement correspondre

RSA vs Ed25519

  • RSA 2048 bits : le standard actuel, supporté partout
  • Ed25519 : plus compact et plus rapide, mais le support n’est pas encore universel (Gmail le supporte, d’autres non)

Recommandation : utilisez RSA 2048 pour la compatibilité, ou publiez les deux en parallèle avec des sélecteurs différents.

Configuration pas à pas

1. Générez une paire de clés

La plupart des services (Google Workspace, Microsoft 365, Brevo, etc.) génèrent les clés pour vous. Pour un serveur autogéré :

openssl genrsa -out dkim_private.pem 2048
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem

2. Publiez la clé publique dans le DNS

Créez un record TXT pour selecteur._domainkey.votredomaine.com avec le contenu de la clé publique.

Attention : les records TXT sont limités à 255 caractères par chaîne. Pour une clé RSA 2048, il faut la découper en plusieurs chaînes :

"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMII"
"BCgKCAQEA..."

3. Configurez la signature sur votre serveur

  • Postfix : utilisez OpenDKIM (opendkim)
  • Google Workspace : Admin Console → Apps → Gmail → Authentifier les emails
  • Microsoft 365 : Defender portal → Email authentication → DKIM

4. Testez

Envoyez un email de test et vérifiez les en-têtes. Vous devriez voir :

Authentication-Results: mx.google.com;
    dkim=pass header.d=votredomaine.com header.s=selector1

Utilisez le DKIM Checker de Sender Audit pour vérifier votre enregistrement DNS, ou l’analyseur d’en-têtes pour décortiquer un email reçu.

Rotation des clés

Les clés DKIM doivent être renouvelées régulièrement (tous les 6 à 12 mois) :

  1. Générez une nouvelle paire de clés avec un nouveau sélecteur (ex: selector2)
  2. Publiez la nouvelle clé publique dans le DNS
  3. Attendez la propagation DNS (quelques heures)
  4. Configurez votre serveur pour signer avec le nouveau sélecteur
  5. Gardez l’ancien record DNS actif quelques jours (pour les emails en transit)
  6. Supprimez l’ancien record

DKIM et DMARC

Pour que DKIM contribue à DMARC, le domaine d= de la signature DKIM doit s’aligner avec le domaine From: de l’email.

C’est particulièrement important quand vous utilisez des services tiers. Beaucoup proposent une option “DKIM avec votre domaine”, activez-la systématiquement.

Astuce : DKIM survit au forwarding (contrairement à SPF). C’est souvent DKIM seul qui sauve la mise quand un email est transféré par un tiers.

Erreurs courantes

  1. Clé trop courte : les clés de 1024 bits sont considérées faibles. Passez à 2048 bits.
  2. Sélecteur introuvable : vérifiez que le record DNS est publié au bon endroit (selecteur._domainkey.domaine)
  3. Record tronqué : la clé publique doit être complète. Un copier-coller raté = signature invalide.
  4. Ne pas signer avec son propre domaine quand on utilise un service tiers → l’alignement DMARC échoue
  5. Oublier la rotation : une clé compromise permet de signer des emails frauduleux

Vérifiez votre configuration

Lancez un audit gratuit pour voir instantanément si votre DKIM est correctement configuré, avec votre SPF et DMARC.

Outils gratuits :


Des questions ? Rejoignez-nous sur Matrix.