DNSSEC: Migración de "jcea.es" a ECDSAP256SHA256

La experiencia de migrar algunos de mis subdominios DNS de uso privado a ECDSAP256SHA256 en 2020, tal y como describo en DNSSEC: Migración a ECDSAP256SHA256 en algunos de mis dominios, ha sido muy indolora y positiva. Sin embargo a la hora de migrar el dominio DNS jcea.es entero, el tema de la compatibilidad sigue sobre la mesa.

Hay novedades recientes documentadas en DNSSEC: enlaces interesantes (20220611), como que la mitad de los dominios DNS protegidos por DNSSEC en Holanda usan ya ECDSAP256SHA256, o que el registrador francés .fr acaba de migrar a ECDSAP256SHA256.

Parece que hay consenso en que usar ECDSAP256SHA256 en DNSSEC es el estado del arte actual y que debería funcionar en cualquier cosa que tenga menos de diez años (si tiene más de diez años, o no soporta DNSSEC en absoluto o, sencillamente, dejará de validar DNSSEC, como si el dominio no estuviese firmado).

Para migrar jcea.es a ECDSAP256SHA256 voy a seguir básicamente los pasos descritos en DNSSEC: Migración a ECDSAP256SHA256 en algunos de mis dominios. Ls diferencia fundamental es que quiero editar los registros DS solo una vez, porque quiero interactuar con mi registrador DNS lo mínimo posible.

Es decir, en DNSSEC: Migración a ECDSAP256SHA256 en algunos de mis dominios añado las claves KSK y ZSK nuevas, manteniendo las claves viejas y añadiendo registros DS nuevos de forma que se admitan las claves KSK viejas y nuevas. Una vez que se propagan los cambios, puedo eliminar los registros DS, y las claves KSK y ZSK antiguos.

Ahora solo quiero hacer un cambio en los registro DS.

Los pasos son:

  1. Añado claves KSK y ZSK nuevas, usando el algoritmo ECDSAP256SHA256. Las activo inmediatamente para que empiecen a firmar. En ese momento los registros DNS tendrán dos conjuntos de firmas: las antiguas y las nuevas.

  2. Ahora espero 24 horas. La idea es que los resolvers ya no tengan en su caché la versión vieja de los registros DNSKEY.

  3. Tras esas 24 horas, intento cambiar el registro DS en mi registrador. Recordemos que habiendo dejado transcurrir 24 horas, los resolvers habrán actualizado ya su caché y podrán validar firmas digitales hechas con las claves antiguas y con las nuevas. El registro DS en el registrador certificaba solo la KSK vieja, y la quiero cambiar para que certifique solo la KSK nueva. En principio, he seguido el procedimiento correcto.

    Pero mi registrador tienen otra opinión. Para evitar problemas y que la gente no se dispare en el pie y quede inaccesible 24 horas, para ciertos cambios de registro DS, el registrador elimina todos los DS de tu dominio durante 24 horas. Eso hace que tu dominio deje de estar protegido por DNSSEC hasta un máximo de 24 horas. Tras ese periodo de espera, se activa el nuevo registro DS que, por sus características, podría tardar aún varias horas en ser visible por algunos resolvers.

    Lo que yo veo en el panel de control de mi registrador es lo siguiente:

    dnssec-20220614-1.png

    El registrador se guarda mi cambio, pero antes de propagarlo ¡desactiva mi protección DNSSEC durante 24 horas!

    jcea@sd-157516:~$ dig @a.nic.es DS jcea.es
    
    ; <<>> DiG 9.11.3-1ubuntu1.17-Ubuntu <<>> @a.nic.es SOA es
    ; (2 servers found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15706
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1
    ;; WARNING: recursion requested but not available
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1232
    ; COOKIE: 709a3adba915e33c0100000062a8e9563cf119fce5693625 (good)
    ;; QUESTION SECTION:
    ;es.                            IN      SOA
    
    ;; ANSWER SECTION:
    es.                     86400   IN      SOA     ns1.nic.es. hostmaster.nic.es. 2022061405 7200 7200 2592000 86400
    
    ;; AUTHORITY SECTION:
    es.                     86400   IN      NS      c.nic.es.
    es.                     86400   IN      NS      a.nic.es.
    es.                     86400   IN      NS      h.nic.es.
    es.                     86400   IN      NS      g.nic.es.
    
    ;; Query time: 22 msec
    ;; SERVER: 2001:67c:21cc:2000::64:41#53(2001:67c:21cc:2000::64:41)
    ;; WHEN: Tue Jun 14 22:02:43 CEST 2022
    ;; MSG SIZE  rcvd: 180
    

    Falta el registro DS. ¡Me he quedado sin DNSSEC!

    Confirmamos que no hay validación DNSSEC para mi dominio.

    [jcea@DNS /home/named/primarios]$ delv www.jcea.es
    ;; validating www.jcea.es/A: no valid signature found
    ; unsigned answer
    www.jcea.es.            28800   IN      A       46.4.94.207
    www.jcea.es.            28800   IN      RRSIG   A 8 3 28800 20220710215201 20220613163941 42347 jcea.es. eDljV3GyAvlma1xporfyNQVB3S65xU9x29QALYyzi2qLv+7r9SsidKf3 EgAHlWIWlD4AijshP2z4xIQsPwUUWIA7XOIStiGUIbxD5Kooddj8b98n zULCkGFot9PdjySejpSfX9z83BXwW3GZVykOxmG8q3AFCnQTUfZ22Ymi GeDaxUm8basf2bl9SCUQGLkxQlAUYfscm10TLlctSHbafi7t9l/xRRgI mJB0fjFhOcbYxs//eLgn2HOSpY+TYNCXOGrYEGG3o42dhHjmQfdShSrb JzxZoO7YxUcL47y5Mcntce1LwCy9Y+1OiFCQCcm2FQEXHIbxQ+DLu+8Q HKU8Sg==
    www.jcea.es.            28800   IN      RRSIG   A 13 3 28800 20220702173151 20220609234003 38453 jcea.es. 93P6yBA0MDmcHgD9dJKt2ljxsCbP0PNSMAHZCTPjZizEYXeAkuw6BLW9 mgRPGSUEWq5KXRebWA2m9IPcFLV+/g==
    

    Vemos que mis registros DNS están firmados digitalmente, pero como mi "padre" no tiene un registro DS para mí, mi DNSSEC está desactivado y los resolvers no lo verificarán.

    Esto fue un problema inesperado con mi registrador. ¡Ciertos cambios te desactivan los registros DS para que "no metas la pata"!

  4. Tras esperar 24 horas hasta que mi registrador propaga el registro DS que le había pedido el día anterior, sale lo siguiente en el panel de control:

    dnssec-20220614-2.png

    Parece que ya ha transcurrido el tiempo de espera impuesto. Veamos qué registro DS le consta ahora al registrador:

    dnssec-20220615-1.png

    Se trata del registro DS correcto.

    Veamos lo que opinan las herramientas ahora:

    jcea@sd-157516:~$ dig @a.nic.es DS jcea.es
    
    ; <<>> DiG 9.11.3-1ubuntu1.17-Ubuntu <<>> @a.nic.es DS jcea.es
    ; (2 servers found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5591
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    ;; WARNING: recursion requested but not available
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1232
    ; COOKIE: a00a5273d36ffa000100000062a8fe4ef838585ff5e47201 (good)
    ;; QUESTION SECTION:
    ;jcea.es.                       IN      DS
    
    ;; ANSWER SECTION:
    jcea.es.                86400   IN      DS      142 13 2 8225C964D5AC5326FAF58265635381B3BC4F5BD67DB9494635F818D8 8DBD6C4B
    
    ;; Query time: 22 msec
    ;; SERVER: 2001:67c:21cc:2000::64:41#53(2001:67c:21cc:2000::64:41)
    ;; WHEN: Tue Jun 14 23:32:11 CEST 2022
    ;; MSG SIZE  rcvd: 112
    

    La cosa tiene buena pinta. Comprobémoslo con la herramienta de verificación:

    jcea@sd-157516:~$ delv www.jcea.es
    ; fully validated
    www.jcea.es.            28800   IN      A       46.4.94.207
    www.jcea.es.            28800   IN      RRSIG   A 8 3 28800 20220710215201 20220613163941 42347 jcea.es. eDljV3GyAvlma1xporfyNQVB3S65xU9x29QALYyzi2qLv+7r9SsidKf3 EgAHlWIWlD4AijshP2z4xIQsPwUUWIA7XOIStiGUIbxD5Kooddj8b98n zULCkGFot9PdjySejpSfX9z83BXwW3GZVykOxmG8q3AFCnQTUfZ22Ymi GeDaxUm8basf2bl9SCUQGLkxQlAUYfscm10TLlctSHbafi7t9l/xRRgI mJB0fjFhOcbYxs//eLgn2HOSpY+TYNCXOGrYEGG3o42dhHjmQfdShSrb JzxZoO7YxUcL47y5Mcntce1LwCy9Y+1OiFCQCcm2FQEXHIbxQ+DLu+8Q HKU8Sg==
    www.jcea.es.            28800   IN      RRSIG   A 13 3 28800 20220702173151 20220609234003 38453 jcea.es. 93P6yBA0MDmcHgD9dJKt2ljxsCbP0PNSMAHZCTPjZizEYXeAkuw6BLW9 mgRPGSUEWq5KXRebWA2m9IPcFLV+/g==
    

    Aquí vemos que DNSSEC vuelve a funcionar y que mis registros están firmados por las claves ZSK antigua y nueva.

  5. Una vez que el cambio de registro DS en el registrador se hace efectivo, espero 24 horas adicionales (el TTL de los registros DS propagados por mi registrador) y configuro mi servidor DNS para que retire las claves KSK y ZSK antiguas. Se pueden eliminar las firmas antiguas, ahora obsoletas, o simplemente dejar que expiren por sí mismas.

Si queremos que las firmas anticuadas desaparezcan rápidamente (no es necesario, se puede dejar que expiren de forma "natural"), podemos ordenarlo ejecutando rndc sign jcea.es.

Tras esa operación, solo quedarán las firmas nuevas:

jcea@sd-157516:~$ delv www.jcea.es
; fully validated
www.jcea.es.            28800   IN      A       46.4.94.207
www.jcea.es.            28800   IN      RRSIG   A 13 3 28800 20220702173151 20220609234003 38453 jcea.es. 93P6yBA0MDmcHgD9dJKt2ljxsCbP0PNSMAHZCTPjZizEYXeAkuw6BLW9 mgRPGSUEWq5KXRebWA2m9IPcFLV+/g==

Por último, podemos ver el estado del dominio jcea.es en mi servidor DNS primario:

[jcea@DNS /home/named/primarios]$ rndc sync jcea.es; dnssec-verify -I raw -o jcea.es db.jcea.es.signed
Loading zone 'jcea.es' from file 'db.jcea.es.signed'
Verifying the zone using the following algorithms: ECDSAP256SHA256.
Zone fully signed:
Algorithm: ECDSAP256SHA256: KSKs: 1 active, 0 stand-by, 0 revoked
                            ZSKs: 1 active, 0 stand-by, 0 revoked

Nota

Con todo lo dicho, es de señalar que la inmensa mayoría de los gestores regionales de DNS aún firman sus zonas con el algoritmo RSASHA256. De hecho, la propia raíz del árbol DNS firma con RSASHA256. El dominio .es también usa RSASHA256.