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 :
- À l’envoi : votre serveur mail calcule une empreinte (hash) du message et la chiffre avec une clé privée (que vous seul possédez)
- La signature est ajoutée dans un en-tête
DKIM-Signaturede l’email - À la réception : le serveur destinataire récupère votre clé publique dans le DNS et déchiffre la signature
- 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...
| Tag | Signification |
|---|---|
v=1 | Version DKIM |
a=rsa-sha256 | Algorithme 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/relaxed | Canonicalisation : 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...
| Tag | Rôle |
|---|---|
v=DKIM1 | Version |
k=rsa | Type 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) :
- Générez une nouvelle paire de clés avec un nouveau sélecteur (ex:
selector2) - Publiez la nouvelle clé publique dans le DNS
- Attendez la propagation DNS (quelques heures)
- Configurez votre serveur pour signer avec le nouveau sélecteur
- Gardez l’ancien record DNS actif quelques jours (pour les emails en transit)
- 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
- Clé trop courte : les clés de 1024 bits sont considérées faibles. Passez à 2048 bits.
- Sélecteur introuvable : vérifiez que le record DNS est publié au bon endroit (
selecteur._domainkey.domaine) - Record tronqué : la clé publique doit être complète. Un copier-coller raté = signature invalide.
- Ne pas signer avec son propre domaine quand on utilise un service tiers → l’alignement DMARC échoue
- 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 :
- DKIM Checker, vérifiez votre record DNS
- Header Analyzer, analysez la signature d’un email reçu
- SPF Checker
- DMARC Checker
Des questions ? Rejoignez-nous sur Matrix.