¿Por qué no validar certificados autofirmados a través de DNS-record en lugar de letsencrypt?

16

Solo me preguntaba. Usamos muchos certificados SSL. Hoy en día, casi exclusivamente utilizamos letsencrypt (¡gracias!). La conclusión de estos certificados es que la prueba de propiedad de los nombres de dominio en el certificado proviene del poder de manipular los registros DNS o el sitio web bajo estos dominios. La prueba de DNS proviene de agregar alguna clave (dada por letsencrypt) como un registro TXT al DNS.

Entonces, si es suficiente prueba para poder cambiar los registros DNS de un dominio, ¿por qué no usar certificados autofirmados con la huella digital en el DNS?

Diría que esto proporciona exactamente la misma cantidad de confianza que el procedimiento basado en DNS de letsencrypt (y otras CA):

  1. Cree una CA autofirmada (solo siga los pasos de los diversos procedimientos)
  2. Crear un certificado para algunos dominios
  3. Firme el certificado del paso 2 con la CA del paso 1. Ahora tiene un certificado básico, firmado por una CA no confiable
  4. Agregue un registro TXT (o dedicado) al DNS de cada uno de los dominios, indicando: firmamos el certificado de este dominio con esta CA. Como: 'CA = -pinta de dedo de CA-'
  5. Un navegador descarga el certificado y lo verifica comparando la huella digital del certificado de CA / CA con los datos en el DNS para el dominio dado.

Esto permitiría crear certificados autofirmados de confianza sin interferencia de terceros, del mismo nivel de confianza que cualquier certificado SSL básico. Mientras tenga acceso al DNS, su certificado es válido. Incluso se podría agregar algo de encriptación DNSSEC, como hacer un hash de la CA más el registro SOA, para asegurarse de que la confianza desaparezca en los cambios en el registro DNS.

¿Se ha considerado esto antes?

Jelmer

Jelmer Jellema
fuente
3
Relevante: tools.ietf.org/html/rfc6698
Håkan Lindqvist
Gracias Håkan! A través de una actualización, encontré el término DANE para este RFC. Última versión del RFC: tools.ietf.org/html/rfc7671 Véase también: en.wikipedia.org/wiki/… (lo leeré más adelante).
Jelmer Jellema
2
El "por qué no" también está cubierto en el enlace RFC Håkan: sin DNSSEC, la confiabilidad de todo el modelo se ve comprometida debido a las vulnerabilidades inherentes al DNS. También se debe tener en cuenta que DNSSEC no hace nada para asegurar el tráfico entre clientes y sistemas recursivos, que sigue siendo susceptible al hombre en la suplantación de identidad.
Andrew B
Andrew, veo el problema con DNSSEC y MIDM, cuando DNSSEC no está forzado para un dominio, y el forzado solo se puede hacer si todas y cada una de las búsquedas se realizan al verificar el servidor de dominio raíz para el tld. Entonces, el problema es: queremos autorizar el uso de algún certificado DV haciendo que el propietario indique su validez, pero no podemos confiar en el DNS debido a su naturaleza jerárquica. El hecho de que el DNS sea vulnerable a la falsificación y los ataques MIDM hace que los certificados DV sean una validación externa de una entrada de dominio. Hmm, seguiré pensando ...
Jelmer Jellema

Respuestas:

18

La infraestructura básica, que haría esto posible, existe y se llama Autenticación basada en DNS de entidades nombradas (DANE) y se especifica en RFC6698 . Funciona mediante un TLSAregistro de recursos, que especifica el certificado o su clave pública de la entidad final o una de sus CA en la cadena (en realidad, hay cuatro tipos diferentes, consulte el RFC para obtener más detalles).

Adopción

Sin embargo, DANE aún no ha visto una adopción generalizada. VeriSign supervisa la adopción de DNSSEC y DANE y realiza un seguimiento de su crecimiento a lo largo del tiempo :

Implementación mundial de TLSA entre el 17 de junio

A modo de comparación, según VeriSign, existen alrededor de 2,7 millones de zonas DNS, lo que significa que un poco más del 1% de todas las zonas tienen al menos un registro TLSA.

No puedo dar ninguna respuesta autorizada, por qué DANE, pero aquí están mis especulaciones:

DANE tiene el mismo problema que las Listas de revocación de certificados (CRL) y el Protocolo de estado de certificados en línea (OCSP). Para verificar la validez de un certificado presentado, se debe contactar a un tercero. Hanno Böck ofrece una buena descripción general de por qué este es un gran problema en la práctica. Se reduce a la cuestión de qué hacer, cuando no puede comunicarse con el tercero. Los proveedores de navegadores optaron por un fallo suave (también conocido como permiso) en este caso, lo que hizo que todo fuera bastante inútil y Chrome finalmente decidió deshabilitar OCSP en 2012.

DNSSEC

Podría decirse que DNS ofrece una disponibilidad mucho mejor que los servidores CRL y OCSP de las CA, pero aún así hace imposible la verificación fuera de línea. Además, DANE, solo debe usarse junto con DNSSEC. Como el DNS normal opera sobre UDP no autenticado, es bastante propenso a la falsificación, ataques MITM, etc. La adopción de DNSSEC es mucho mejor que la adopción de DANE, pero aún está lejos de ser omnipresente.

Y con DNSSEC volvemos a encontrarnos con el problema del fallo suave. Que yo sepa, ninguno de los principales sistemas operativos de servidor / cliente proporciona un solucionador de validación DNSSEC de forma predeterminada.

Luego está también el tema de la revocación. DNSSEC no tiene mecanismo de revocación y se basa en claves de corta duración.

Soporte de software

Todo el software participante debe implementar el soporte DANE.

En teoría, podría pensar que este sería el trabajo de las bibliotecas de cifrado y los desarrolladores de aplicaciones no tendrían que hacer mucho, pero el hecho es que las bibliotecas criptográficas generalmente solo proporcionan primitivas y las aplicaciones tienen que hacer mucha configuración y configuración ellos mismos. (y lamentablemente hay muchas formas de equivocarse).

No sé, ningún servidor web importante (por ejemplo, Apache o nginx), por ejemplo, implementó DANE o tiene planes de hacerlo. Los servidores web son de particular importancia aquí, porque cada vez más cosas se basan en tecnologías web y, por lo tanto, a menudo son las primeras, donde las cosas se implementan.

Cuando miramos CRL, OCSP, y OCSP Grapado como comparación, podríamos inferir cómo será la historia de adopción de DANE. Solo algunas de las aplicaciones que usan OpenSSL, libnss, GnuTLS, etc. admiten estas características. Tomó un tiempo para que un software importante como Apache o nginx lo admitiera y, nuevamente, refiriéndose al artículo de Hanno Böck, se equivocaron y su implementación es defectuosa. Otros proyectos de software importantes, como Postfix o Dovecot no son compatibles con OCSPy tienen una funcionalidad CRL muy limitada, básicamente apuntan a un archivo en el sistema de archivos (que no es necesariamente una relectura regular, por lo que tendrías que recargar tu servidor manualmente, etc.). Tenga en cuenta que estos son proyectos, que con frecuencia usan TLS. Entonces puede comenzar a mirar cosas, donde TLS es mucho menos común, como PostgreSQL / MySQL, por ejemplo, y tal vez ofrecen CRL en el mejor de los casos.

Por lo tanto, ni siquiera los servidores web modernos lo implementan y la mayoría del otro software ni siquiera ha implementado OCSP y CRL, buena suerte con su aplicación o dispositivo empresarial de 5 años.

Aplicaciones potenciales

Entonces, ¿dónde podrías usar DANE? A partir de ahora, no en Internet en general. Si controla el servidor y el cliente, tal vez sea una opción, pero en este caso, a menudo puede recurrir a la fijación de clave pública.

En el espacio de correo, DANE está obteniendo cierta tracción, porque SMTP no tuvo ningún tipo de cifrado de transporte autenticado durante el mayor tiempo. Los servidores SMTP a veces usaban TLS entre sí, pero no verificaron que los nombres en los certificados realmente coincidieran, ahora están comenzando a verificar esto a través de DANE.

Sebastian Schrader
fuente
66
Creo que tu última oración se cortó.
8bittree
Gracias Sebastián, tu reacción es muy útil. Por favor, vea mis comentarios y los de Andrew debajo del OP.
Jelmer Jellema
3
¿Por qué es necesario que los servidores web implementen esto? Podría agregar un certificado autofirmado a la configuración de Apache y poner la huella digital en el DNS yo mismo, ¿verdad?
Jelmer Jellema
1
También hay problemas de rendimiento y escalabilidad con DNSSEC frente a DNS: el DNS simple puede usar respuestas "enlatadas", pero DNSSEC tiene que hacer criptodance para cada solicitud, y hay MUCHAS solicitudes DNS volando. Como, MUCHAS solicitudes de DNS.
Joker_vD
44
@Joker_vD DNSSEC firma los datos, no el tráfico. Es decir, en el extremo autorizado, puede firmar su zona y no tener más "criptodance" durante la vigencia de las firmas (o hasta que cambie los datos de la zona); es en el lado del validador (lado del cliente) que la "criptodance" por solicitud no almacenada en caché debe suceder. Tanto los datos adicionales como el estado DNSSEC se ajustan al modelo de almacenamiento en caché general para DNS.
Håkan Lindqvist
5

Diferentes tipos de procedimientos de validación de certificados.

Con los certificados regulares firmados por CA, hay varios niveles de validación de certificados:

  • Validación de dominio (DV)
    Solo se valida la propiedad del nombre de dominio, solo el nombre de dominio se muestra como "Asunto" en el certificado
  • Validación de la organización (OV) El
    nombre de dominio y el nombre del propietario están validados, el nombre de dominio y el nombre del propietario se muestran como "Asunto" en el certificado
  • Validación Extendida (EV) La
    validación más rigurosa de la entidad propietaria, el nombre de dominio y el nombre del propietario se muestran como "Asunto" en el certificado, barra verde con el nombre del propietario

El proceso que describe y propone un reemplazo solo se aplica al nivel más bajo, Validación de dominio (DV).

DV es el nivel en el que la validación es relativamente sencilla de automatizar, como lo que ha hecho LetsEncrypt, y proporciona un nivel de confianza similar al que DNS podría proporcionar si se usara como la única fuente para un ancla de confianza (implicaciones de la IU, certificado puede ser confiable pero contener datos adicionales que de ninguna manera están validados).

Autenticación basada en DNS de entidades nombradas (DANE)

DANE se basa en DNSSEC (ya que la autenticidad de los datos DNS es crucial) para publicar información de anclaje de confianza para clientes TLS en DNS.

Utiliza el TLSAtipo RR y puede usarse para identificar el certificado o la clave pública ( selector ) de la entidad final o de la entidad emisora ​​de certificados, con o sin necesidad de que la validación de la cadena de certificados tenga éxito ( uso del certificado ) y cómo el certificado / los datos clave se representan en el registro ( tipo coincidente ).

El TLSAnombre del propietario del registro tiene un prefijo que indica el puerto y el protocolo (p _443._tcp. Ej. ) Y el RData indica los modos y cert usage, además de los datos de cert / key que coinciden. Consulte la sección 2.1 de RFC6698 para conocer los detalles de estos parámetros.selectormatching type

Un TLSAregistro puede, por ejemplo, verse así:

_443._tcp.www.example.com. IN TLSA  2 0 1 d2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971

Con los modos de uso 2o 3(indica el uso del ancla de confianza TLSA solo), un cliente compatible con DANE aceptaría un certificado que no esté firmado por una CA de confianza general pero que coincida con el TLSAregistro.
Esto es conceptualmente igual a lo que propone en su pregunta.

¿La captura? Los clientes conscientes de DANE son actualmente más o menos inexistentes, un problema es que DNSSEC en sí no está tan ampliamente implementado (especialmente la validación en la máquina del cliente) como lo que probablemente se necesitaría para que DANE despegue. Probablemente sea un pequeño problema de huevo y gallina, considerando que DANE es uno de los primeros casos de uso nuevos potencialmente grandes que se basan en datos DNS autenticados.

Hay un complemento de navegador que agrega validación DNSSEC y DANE , aparte de eso, no hay mucho que esté cerca de la corriente principal en este momento. Y, al ser un complemento en lugar de ser compatible de forma nativa, sirve más como prueba de concepto que cualquier otra cosa cuando se trata de uso general.


Se podría hacer. Ha sido considerado. Todavía podría suceder, pero no ha habido mucho movimiento.

Håkan Lindqvist
fuente
Gracias Håkan Como Andrew señala en mi OP, hay un problema con DNS y DNSSEC, ya que DNSSEC no está forzado (supongo que ni siquiera cuando las claves están en su lugar en el DNS de TLD) los servidores DNS en el camino podrían falsificar la información de DANE , ¿derecho? Por lo tanto, DNSSEC debe estar obligado a que los registros de DANE sean válidos, lo que a su vez significa que todas y cada una de las verificaciones también deben verificar las claves en el servidor de TLD.
Jelmer Jellema
55
@JelmerJellema Como señalé en mi respuesta, DNSSEC necesita ser validado en el cliente (no hacer eso es el problema al que Andrew apuntó) y solo se pueden usar registros TLSA firmados validados con éxito. Este problema del que habla no es un problema en términos de diseño, es un problema en términos de soporte en el software convencional.
Håkan Lindqvist
2
Si bien no es perfecto, cada vez más servidores de nombres recursivos en ISP o abiertos, como 8.8.8.8 o 9.9.9.9 están haciendo la validación DNSSEC. dnssec-trigger basado en unbound y / o cosas como stubby permitiría tener una validación DNSSEC completa en los clientes sin necesariamente una resolución DNS de validación completa en el cliente. Pero estamos lejos de eso ...
Patrick Mevzek