¿Las reglas utilizadas para validar certificados en los principales navegadores están documentadas en alguna parte?

4

Estoy tratando de obtener un certificado que sea bueno para dos subdominios. Esencialmente, el equivalente TLS del certificado lógico a nivel humano " *.*.example.com ".

Lo he intentado:

  • Restricciones de nombre: funcionan en el estándar, pero no funcionan en la práctica, principalmente porque OS X no las admite.
  • Certificados de comodines. Un solo * no lo corta:

      

    Si el carácter comodín es el único carácter del extremo izquierdo   etiqueta en el identificador presentado, el cliente NO DEBE comparar   Contra todo menos la etiqueta más a la izquierda de la referencia.   identificador (por ejemplo, * .example.com coincidiría con foo.example.com pero no   bar.foo.example.com o example.com)

    un *.* tampoco funciona,

      

    El cliente NO DEBE intentar hacer coincidir un identificador presentado en   que el carácter comodín comprende una etiqueta distinta de la   etiqueta más a la izquierda

FF rechaza el comodín doble; Safari acepta de forma incorrecta. Chrome lo rechaza (pero debido a que utiliza OS X para implementar el cuadro de diálogo de información del certificado, en el momento de la consulta, ¡afirma que lo acepta!).

En lugar de desechar estas reglas una por una, ¿existe alguna documentación de los algoritmos utilizados por los principales navegadores para validar certificados? (Especialmente desde entonces, Firefox parece ser el solo navegador implementando el estándar ...)

1 La sección 6.4.3 en el RFC implica en gran medida que *.*.example.com debería validarse,

    
pregunta Thanatos 01.09.2015 - 01:08
fuente

2 respuestas

5

Lo que hacen los navegadores está sujeto a cambios en los caprichos de quien los mantiene, y lo hacen sin la documentación adecuada.

El tratamiento de los caracteres comodín en las entradas dNSName en los certificados se define formalmente en RFC 2818 , que implicaría que, por ejemplo, *.*.example.com coincidiría con un nombre de subdominio que tiene dos niveles por debajo de example.com ; también dice que f*.com realmente coincidirá con foo.com pero no con bar.com .

Resultó que los navegadores no siguen estas reglas, por una variedad de razones que nunca se han documentado completamente, pero que se dividen principalmente en dos categorías:

  1. "Razones de seguridad"
  2. pereza

"Seguridad" aquí significa "nos encontramos con algunos abusos y cambiar las reglas sobre la marcha parecía una buena idea en ese momento". Por ejemplo, una vez que alguien produjo un certificado *.com , alguien se dio cuenta de que no era una buena idea y consideró conveniente prohibirlo simplemente en el código del navegador. Un punto importante a considerar aquí es que los proveedores de navegadores y las CA comerciales no son las mismas personas; Desde el punto de vista de un mantenedor del navegador, si hay que hacer algo rápidamente (por ejemplo, dentro de las 24 horas, no en los 24 meses), debe hacerse en el propio navegador. Los problemas de seguridad relacionados con los navegadores tienden a ser muy publicitados y bastante dañinos para la imagen del navegador, por lo que este llamado a una reacción inmediata, que generalmente (y desafortunadamente) excluye la buena documentación.

La pereza es probablemente culpable por la falta de soporte de "comodines dobles" como *.*.example.com . En general, si desea implementar soporte para expresiones con varios comodines, debe hacerlo con bucles anidados (para explorar todas las posibles combinaciones de coincidencia). La restricción de comodines a un solo " * ", además al comienzo del nombre, hace que la implementación sea mucho más sencilla.

Un hecho adicional a tener en cuenta es la propiedad paralizante de "seguridad". Cuando se ha hecho algo, o parece haberse hecho, en nombre de "seguridad", muchos desarrolladores pierden toda iniciativa y son extremadamente reacios a modificarlo, porque saben que cualquier contratiempo relacionado con la seguridad conlleva toda la culpa.

RFC 6125 trató de documentar la práctica existente, aunque varía mucho dependiendo del navegador (y sistema operativo, ya que algunos navegadores delegan la validación y el procesamiento de certificados al sistema operativo). Tenga en cuenta que RFC 6125 no realmente prohíbe más de un * en un nombre; de hecho, se ha enviado una errata al respecto, y el editor lo puso bajo el estado " mantenido para la actualización del documento ", que realmente significa" buen punto, lo arreglaremos en un RFC posterior ".

Mientras que RFC 6125 enumera los requisitos en el lado del navegador (consumidor de certificados), el CA / browser forum también considera el lado de CA (productor de certificados). Los Requisitos de referencia parecen implicar que solo un * puede aparece, y solo a la izquierda de un nombre (pero esto no está muy claramente establecido).

Si bien hay mucho más en la validación de certificados que en el procesamiento de nombres de comodines, todo el negocio relacionado con el carácter * ilustra bastante bien que no hay nada documentado con firmeza, y los proveedores de navegadores ya han tomado el hábito de hacer las cosas primero y documentar las cosas solo mucho más tarde (si las hay).

    
respondido por el Tom Leek 01.09.2015 - 02:00
fuente
1
  

La Sección 6.4.3 en el RFC implica fuertemente que *.*.example.com debería validarse,

Leí esta sección de manera diferente. En mi opinión, dice claramente que las coincidencias DEBEN hacerse solo contra la etiqueta que está más a la izquierda (6.4 .3.1) y que si un comodín es el único carácter en la etiqueta como en su caso, DEBERÍA coincidir con la parte más a la izquierda del identificador (6.4.3.2).

Sobre la base de estas reglas, DEBERÍA coincidir solo con la parte más a la izquierda del identificador con la parte más a la izquierda del nombre de comodín, es decir, solo la parte marcada con >>..<< : >>*<<.*.example.com . Solo son recomendaciones, pero según mi experiencia, los navegadores se adhieren a estas.

  

¿existe alguna documentación de los algoritmos utilizados por los principales navegadores para validar certificados?

No tengo conocimiento de ninguna documentación oficial de los distintos proveedores. Pero desde mi experiencia, todos manejan lo básico de la misma manera, pero difieren en casos poco comunes:

  • Ningún navegador actual admite varios comodines (era nuevo para mí que Safari hace según tu pregunta), pero todos admiten el comodín más a la izquierda. Las herramientas de línea de comandos y las validaciones en el lenguaje de programación alcanzan lentamente este comportamiento.
  • Algunos verifican solo la sección de Nombres alternativos del sujeto (SAN) si contiene nombres de DNS e ignoran el CN en este caso. Otros cheques CN adicionalmente a SAN. Algunos dejan de verificar el CN simplemente si hay registros en la sección SAN, incluso si todos estos son solo registros de direcciones IP.
  • Al validar una dirección IP, la mayoría necesita la dirección IP como una entrada de IP en la sección SAN. Algunos comprueban la dirección IP también contra CN. En su lugar, MSIE requiere que la dirección IP esté dentro de un registro de DNS en la SAN o como CN y no verifica las entradas de SAN de tipo de dirección IP.
  • El comportamiento con respecto a los sufijos públicos es diferente. Algunos de estos sufijos como co.uk tienen un significado especial, es decir, para algunas compañías no debería ser posible obtener un certificado para *.co.uk sino solo para *.example.co.uk . Algunos navegadores verifican este comportamiento para algunos sufijos, pero no para all . Otros navegadores no lo comprueban en absoluto.

En mi opinión, el navegador que es el más estricto en la mayoría de los casos es Safari, por lo que si funciona allí, por lo general, también funciona para otro navegador. Pero al validar las direcciones IP, también tiene que abordar el manejo defectuoso de MSIE al incluir la dirección IP no solo como registro de SAN de IP, sino también como registro de SAN de DNS.

Y, por supuesto, eso es solo la parte de validar el nombre en la URL contra los nombres en el certificado. Luego está el problema de la revocación, cómo manejan los certificados intermedios faltantes, de dónde obtienen los certificados raíz, etc. También hay muchos comportamientos diferentes entre los navegadores y, a veces, incluso entre el mismo navegador en diferentes plataformas :(

    
respondido por el Steffen Ullrich 01.09.2015 - 06:45
fuente

Lea otras preguntas en las etiquetas