Certificado de raíz SSL opcional?

23

Es posible que haya tenido una impresión errónea de cómo deberían configurarse los servidores y qué certificados se envían realmente durante el mensaje de certificado de saludo del servidor. Encontré esto hoy desde Symantec / VeriSign:

  

Root instalado en el servidor. Para las mejores prácticas, elimine la raíz autofirmada del servidor. El paquete de certificados solo debe incluir la clave pública del certificado y la clave pública de cualquier autoridad de certificación intermedia. Los navegadores solo confiarán en los certificados que se resuelvan en las raíces que ya están en su almacén de confianza, ignorarán un certificado raíz enviado en el paquete del certificado (de lo contrario, cualquier persona podría enviar cualquier raíz).

Si esto es cierto, y el certificado raíz no necesita instalarse en el servidor, bueno, ahí va lo que pensé que sabía sobre la configuración adecuada del servidor y cómo la cadena se vuelve a validar a la raíz. Entonces, de nuevo, cuando vuelvo a mirar esta pregunta , en la sección Certificados y autenticación De la respuesta de Thomas Pornin dice:

  

Se supone que el cliente debe hacer lo siguiente:

     
  • Obtenga una cadena de certificados que finalice con el certificado del servidor. El mensaje de certificado del servidor debe contener, precisamente, tal cadena.
  •   

Esto dice más o menos lo contrario del mensaje de Symantec / VeriSign anterior, a menos que esté mal entendiendo algo. Entonces:

  1. ¿Un servidor necesita que se instale la cadena completa, incluida la raíz? Si no, ¿con qué se compara un navegador para la validación, ya que el servidor no proporcionará su certificado raíz durante el intercambio? ¿Simplemente mira el certificado de identidad y lo obtiene desde allí? (¿Cómo abrir un certificado de identidad en su máquina local y ver la cadena completa en la ruta de certificación?)

  2. De nuevo, si esto es cierto, ¿qué pasa con las aplicaciones de cliente independientes que usan bibliotecas SSL? ¿Dependerá esto de la aplicación, ya que puede tener diferentes métodos de creación de rutas a una raíz confiable frente a un navegador?

pregunta user53029 13.08.2014 - 21:11
fuente

4 respuestas

26

El servidor siempre envía una cadena. Según el TLS standard , la cadena puede incluir o no el certificado raíz en sí mismo; El cliente no necesita esa raíz ya que ya la tiene. Y, de hecho, si el cliente aún no tiene la raíz, entonces recibirla del servidor no sería de ayuda, ya que solo se puede confiar en una raíz por el hecho de que ya está allí .

Lo que dice Symantec es que recomiendan no enviar la raíz, solo el resto de la cadena. Esto tiene sentido: como la raíz es inútil para fines de validación, también puede evitar enviarla y guardar el ancho de banda de datos de aproximadamente 1 kB por conexión.

De todos modos:

  • El certificado del servidor, con su cadena, no es para el servidor. El servidor no tiene uso para su propio certificado. Los certificados son siempre para otras personas (aquí, el cliente). Lo que utiliza el servidor es su clave privada (que corresponde a la clave pública en su certificado). En particular, el servidor no necesita confiar en su propio certificado ni en ninguna CA que lo haya emitido.

  • En TLS, se supone que el servidor envía una cadena; y se supone que el cliente de alguna manera utiliza la clave pública del servidor para el protocolo de enlace. El cliente es libre de "conocer" esa clave pública de la forma que desee, aunque, por supuesto, se espera que el cliente obtenga la clave pública del servidor de la cadena de certificados que el servidor acaba de enviar. Los navegadores tratarán principalmente de usar la cadena enviada por el servidor (al vincularla debajo de una de las raíces en las que el navegador ya confía); en caso de fallar, intentarán construir otras cadenas basadas en certificados intermedios de CA que ya conocen o que pueden descargar sobre la marcha.

    En aplicaciones independientes, los escritores de aplicaciones son libres de configurar u omitir ese paso de manera arbitraria, lo que puede ser útil si la clave pública del servidor se puede codificar en el código de la aplicación (en cuyo caso la cadena enviada por el servidor es simplemente ignorado por completo). Desafortunadamente, la libertad de implementar un paso de validación de certificado personalizado también es libertad para derribar la seguridad, apuñalarlo hasta la muerte y luego arrojar su cadáver en una zanja. Sucede demasiado a menudo.

respondido por el Thomas Pornin 13.08.2014 - 21:23
fuente
4
  

con qué se compara un navegador para la validación, ya que el servidor no suministrará su certificado raíz durante el protocolo de enlace

La idea principal de la verificación de certificados es que los clientes tienen algunos certificados raíz en los que confía (que se envían con el navegador o sistema operativo) y que valida el certificado que el navegador envía contra este ancla de confianza local.

Esto significa que el servidor no necesita (y no debe) enviar el certificado raíz al cliente, ya que se supone que este certificado raíz debe estar en el extremo del cliente. Si aún envía el certificado raíz, el cliente simplemente lo descartará, es decir, no lo hará. confíe en cualquier certificado raíz enviado por el servidor.

  

Nuevamente, si esto es cierto, ¿qué pasa con las aplicaciones de cliente independientes que usan bibliotecas SSL? ¿Dependerá esto de la aplicación, ya que puede tener diferentes métodos de creación de rutas a una raíz confiable frente a un navegador?

El proceso de verificación básico entre navegadores y bibliotecas SSL es el mismo. Hay algunas diferencias en la creación de rutas en casos de borde entre openssl y navegadores (consulte enlace ) y la verificación del nombre de host del destino con el nombre (s) en el certificado del servidor a menudo tiene errores o incluso no existe fuera de los navegadores comunes.

    
respondido por el Steffen Ullrich 13.08.2014 - 21:24
fuente
4

Envío la raíz cuando sea conveniente hacerlo.

Si el cliente confía en la raíz, no importa si lo envías o no.

Cuando el cliente no reconoce la raíz, en mi experiencia, el cliente de MS Windows produce mensajes de diagnóstico mucho menos confusos si se proporcionó la raíz no confiable en la cadena.

En cuanto a cómo sabe qué raíz usar si no se proporciona una, el siguiente a la raíz (que debe estar en la cadena provista) contiene la información de identificación de la raíz, que el cliente utiliza para buscar la raíz en la tienda del cliente.

    
respondido por el jjanes 13.08.2014 - 22:15
fuente
2

Tenga en cuenta que hay software de servidor (como IBM HTTP Server) que no se iniciará en absoluto si la CA raíz no está incluida en el almacén de claves.

    
respondido por el NuTTyX 13.08.2014 - 23:57
fuente

Lea otras preguntas en las etiquetas