DKIM en la práctica: selectores, claves y servicios
Módulo 4: Entregabilidad: SPF, DKIM y DMARC en la práctica · Tiempo de lectura: 12 minutos
Objetivo de aprendizaje: Después de esta lección podrá analizar una cabecera DKIM-Signature, configurar DKIM con su propio dominio para cualquier servicio de envío, comprobar si un selector funciona y explicar cómo sustituir claves de forma segura.
Conceptos clave: DKIM-Signature, d= (dominio firmante), s= (selector), h= (cabeceras firmadas), bh= y b=, canonicalización (c=), <selector>._domainkey.<dominio>, TXT con p= o CNAME hacia el servicio, longitud de clave 2048 bits (RFC 8301), fragmentos de 255 caracteres, ed25519 (RFC 8463), sustitución de claves, p= vacío (revocada), DKIM y redirección
Por qué DKIM es el más importante de los tres
SPF indica qué servidores pueden enviar correo, pero se rompe al redirigirse y se fija en el Return-Path, que en muchos servicios no es el suyo. DKIM coloca una firma en el propio correo. Esa firma sobrevive a la redirección (siempre que el mensaje no se modifique) y está vinculada a un dominio que usted elige. Por eso, en la práctica, DKIM es a menudo lo único que hace que DMARC supere la comprobación en newsletters, facturas de un programa de contabilidad y correo redirigido.
Los fundamentos (cómo figura la clave en el DNS, qué es un selector) se explican en el curso de DNS, lección 4.4. Aquí profundizamos: qué contiene exactamente una firma y cómo se configura DKIM para cada servicio.
Analizar una firma
Abra las cabeceras de un correo que haya recibido (lección 1.5). Si el mensaje está firmado, en la parte superior 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...larga cadena de caracteres...Qx9A==| Etiqueta | Significado |
|---|---|
v=1 | Versión de DKIM |
a=rsa-sha256 | Algoritmo: clave RSA, SHA-256. También posible: ed25519-sha256 |
c=relaxed/relaxed | Canonicalización: con qué rigor se tratan los pequeños cambios (espacios, mayúsculas en los nombres de cabecera), tanto para las cabeceras como para el cuerpo del mensaje. relaxed es lo habitual y más tolerante que simple |
d=example.com | El dominio firmante. Este dominio responde del correo. DMARC lo compara con la dirección De |
s=x | El selector: qué clave de ese dominio se ha usado |
t= | Momento de la firma (segundos desde 1970) |
h= | Qué cabeceras están firmadas. from debe figurar siempre |
bh= | Una huella (hash) del cuerpo del mensaje |
b= | La firma propiamente dicha |
El destinatario obtiene la clave pública en <s>._domainkey.<d>, en este caso x._domainkey.example.com, y comprueba si b= coincide con las cabeceras indicadas en h= y la huella bh=. Si en el camino se ha cambiado una sola letra del cuerpo o de una cabecera firmada, la comprobación falla.
En Authentication-Results verá el resultado, por ejemplo dkim=pass header.d=example.com header.s=x. Un correo puede tener varias firmas, por ejemplo una de su dominio y otra del propio servicio. Para DMARC solo cuenta una firma cuyo d= corresponda a su dominio De.
Cada servicio, su propio selector
Un dominio puede tener muchas claves DKIM a la vez, cada una bajo su propio selector. Esa es precisamente la idea: cada servicio que envía correo en su nombre firma con una clave propia.
| Remitente | Selector (ejemplo) | Cómo figura en el DNS |
|---|---|---|
| Servidor de correo de hosting | x o default | TXT con la clave, creado por el panel |
| Microsoft 365 | selector1, selector2 | dos registros CNAME hacia Microsoft |
| Google Workspace | google (por defecto) | TXT con una clave que usted genera en la consola de administración |
| Servicio de newsletter | por ejemplo k2, k3, mte1 | normalmente registros CNAME hacia el servicio |
¿TXT o CNAME?
- Con un registro TXT usted mismo coloca la clave pública en su DNS. Si el servicio quiere una clave nueva, tendrá que modificar el registro.
- Con un registro CNAME dirige el selector hacia un nombre del servicio, por ejemplo
k2._domainkey.example.com CNAME dkim2.mailer.example.El servicio gestiona entonces la clave por su cuenta y puede sustituirla sin que usted tenga que hacer nada. Por eso los grandes servicios prefieren el CNAME, y a menudo usan dos: así pueden alternar entre una clave activa y una nueva.
Tenga en cuenta que un CNAME no puede coexistir con otro registro en el mismo nombre. Si ya hay un TXT en selector1._domainkey, elimínelo.
Lo más importante: activar DKIM en el servicio
En muchos servicios, DKIM con su propio dominio no está activado por defecto. En ese caso firman con su propio dominio (d=mailer.example). El correo está firmado, pero no alineado con su dirección De. Para DMARC, eso no cuenta. En la administración del servicio suele llamarse "verificar dominio", "verificación de dominio", "autenticación" o "dominio de remitente propio". Solo cuando ha colocado los registros y además lo ha activado en el servicio, este firma con d=example.com.
Claves: longitud, fragmentos y algoritmo
- Longitud. El RFC 8301 establece: al menos 1024 bits, y los remitentes deben usar al menos 2048 bits. Use 2048. Una clave de 512 bits se considera no válida por los destinatarios.
- Fragmentos de 255 caracteres. Un registro TXT se compone de cadenas de un máximo de 255 caracteres. Una clave de 2048 bits ocupa unos 400 caracteres y no cabe en una sola cadena. El registro consiste entonces en dos o más cadenas consecutivas (
"v=DKIM1; k=rsa; p=MIIBIj..." "...IDAQAB"), que el destinatario une. La mayoría de los paneles lo hacen automáticamente. Si algo falla, obtendrá una clave truncada y todas las firmas fallarán. Por eso, copie siempre la clave completa, sin espacios ni comillas adicionales en medio. - ed25519 (RFC 8463) es un algoritmo más moderno con claves cortas. Todavía no todos los destinatarios lo comprueban. Por eso, quien lo usa firma con dos firmas: una RSA y una ed25519.
Sustituir una clave
Conviene sustituir una clave de vez en cuando, y desde luego si sospecha que la clave privada se ha filtrado (por ejemplo tras un ataque al servidor o la salida de un administrador). Proceda así:
- Cree una nueva clave bajo un nuevo selector, por ejemplo
s2026, y coloque la clave pública en el DNS. - Espere a que el registro sea visible en todas partes (el TTL, véase el curso de DNS, lección 6.1).
- Haga que el servidor firme con el nuevo selector.
- Deje la clave antigua todavía unos días más: el correo que ya estaba en camino o que se vuelve a comprobar aún hace referencia a ella.
- Revoque la clave antigua dejando
p=vacío (v=DKIM1; p=), o elimine el registro.
En los servicios con registros CNAME, el propio servicio se encarga de esto.
Qué hace que DKIM falle
- El correo se modifica en el camino: una lista de distribución que añade
[nombre de la lista]en el asunto o un pie de página, un antivirus que añade una línea al final del correo, un servidor de redirección que convierte el formato. - Clave incorrecta o truncada en el DNS.
- El selector no existe: un error tipográfico en el nombre, o
selector1._domainkey.example.com.example.com(el nombre de dominio duplicado, porque el panel ya lo añade por su cuenta). - Clave revocada (
p=vacío) mientras el servidor sigue firmando con ese selector.
Comprobar si funciona
- Envíe un correo desde el servicio a una dirección de Gmail o Outlook.com.
- Abra las cabeceras y busque el
DKIM-Signature: anoted=ys=. - Compruebe en
Authentication-Resultssi aparecedkim=pass, y siheader.d=coincide con su dominio. - Busque el selector:
dig TXT s._domainkey.example.com(o con una herramienta en línea). Debe haber unp=con una clave larga, o un CNAME que apunte a un registro así.
En la práctica: así se ve en un panel
En un paquete de hosting de WebOké, DKIM está activado por defecto, con el selector x: el registro se llama x._domainkey.<sudominio>. En DirectAdmin lo verá en Administración de DNS; si su DNS está en otro proveedor, copie ese registro allí. En Mi WebOké, la tarjeta Configurar E-Mail muestra qué valor debe figurar y si se encuentra. En otros proveedores el selector se llama de otra forma (default, mail, dkim), pero lo encontrará del mismo modo: en el panel o en el s= de un correo firmado.
Resumen
- DKIM es la comprobación que sobrevive a la redirección y que vincula cada servicio a su propio dominio; para DMARC solo cuenta una firma con su dominio en
d=. - En el
DKIM-Signatureencontrarád=(dominio) ys=(selector); la clave se encuentra en<s>._domainkey.<d>. - Cada servicio recibe su propio selector; los registros CNAME permiten que el servicio sustituya las claves por sí mismo. Active DKIM con su propio dominio también en el servicio.
- Use 2048 bits; preste atención a las claves truncadas al copiarlas.
- Sustituya una clave con un nuevo selector y revoque la antigua solo después.
Cuestionario
Ejercicio
Ejercicio Z4.3: Comprobar un selector DKIM. Envíe un correo desde su propio dominio (o desde un servicio que envíe en su nombre) a una dirección propia en otro proveedor. Abra las cabeceras y rellene los valores de d= y s= del DKIM-Signature, y lo que figura en Authentication-Results junto a dkim=. El programa busca el selector en tiempo real, sigue un posible CNAME, comprueba la clave (presente, no vacía, longitud) y le indica si d= está alineado con el dominio que usted indica como remitente.
Para seguir leyendo
Los pasos de estos artículos corresponden a los paneles de WebOké; en otros proveedores el funcionamiento es parecido.
- Curso gratuito de DNS 4.4: DKIM: la firma de su correo
- Manual de DirectAdmin 5.8: Activar y comprobar DKIM
- Configurar DKIM cuando el DNS está en un servidor externo
- Manual de WebOké 6.7: La tarjeta Configurar el correo (MX, SPF, DKIM, DMARC)
- RFC 6376 (DKIM), RFC 8301 (longitud de clave y algoritmos), RFC 8463 (ed25519)
