Múltiples certificados de servidor SSL

4

Soy algo nuevo en SSL. Durante un establecimiento de conexión SSL, veo que el servidor está enviando varios certificados.

¿Puede alguien ayudarme a comprender por qué el servidor está enviando varios certificados? ¿Y cómo puedo hacer lo mismo con el servidor openssl, apache o gnutls?

Gracias de antemano.

** Actualización ** Gracias por todas las respuestas. También me di cuenta de cómo hacerlo en apache2

Agregué la configuración SSL en ports.conf /etc/apache2/ports.conf

<IfModule mod_ssl.c>
    Listen 443
    <VirtualHost *:443>
      ServerName www.example.com
      SSLEngine on
      SSLCertificateFile /root/25apr-rootcert
      SSLCertificateKeyFile /root/25apr-rootkey
      SSLCertificateChainFile /root/25apr-chain.pem
    </VirtualHost>
</IfModule>

Es necesario agregar el crt encadenado como SSLCertificateChainFile /root/25apr-chain.pem

Para propósitos de prueba, simplemente concatené / root / 25apr-rootcert a /root/25apr-chain.pem varias veces.

Espero que esto ayude!

    
pregunta ahamed101 24.06.2014 - 19:34
fuente

3 respuestas

4

Para todas las cosas de SSL, leer el estándar no es una mala idea; Es muy legible (para un estándar). Es posible que desee hojear primero esta respuesta , como una especie de Guía de lectura.

Para su pregunta específica, lo que el servidor envía como "certificado" se describe en sección 7.4.2 :

certificate_list
   This is a sequence (chain) of certificates.  The sender's
   certificate MUST come first in the list.  Each following
   certificate MUST directly certify the one preceding it.  Because
   certificate validation requires that root keys be distributed
   independently, the self-signed certificate that specifies the root
   certificate authority MAY be omitted from the chain, under the
   assumption that the remote end must already possess it in order to
   validate it in any case.

El punto es que un certificado , para que pueda ser utilizado por quien lo reciba (en este caso, el cliente), primero debe ser validado , un proceso mediante el cual El cliente coloca el certificado al final de una cadena. La cadena comienza con un "ancla de confianza" (una "CA raíz" cuya clave pública se conoce a priori ), y cada elemento de la cadena es un certificado de CA intermedio, emitido (firmado) por el certificado anterior en La cadena. La cadena finaliza con el certificado que se va a validar. La validación implica verificar una gran cantidad de cosas (descritas en otra norma que es sustancialmente menos legible para seres humanos sanos ), en particular, todas las firmas criptográficas (cada certificado está firmado por su CA emisora; la firma se verifica con respecto a la clave pública contenida en el certificado que aparece inmediatamente antes en la cadena).

Dado que se debe construir una cadena, se supone que el servidor debe enviar al cliente una cadena completa, para que el cliente pueda trabajar directamente en ella. De lo contrario, el cliente tendría que localizar y obtener los certificados de CA intermedios relevantes, un proceso que puede ser bastante complejo y propenso a fallas.

Puntos notables:

  • La cadena enviada por el servidor está en orden inverso: comienza con el certificado de entidad final (es decir, el certificado del servidor se dice correctamente), seguido del certificado de la CA que emitió el certificado del servidor, luego la CA que emitió el certificado de esa CA, etc.

  • La cadena puede o no contener el certificado de CA raíz en sí. No es necesario enviarlo porque el cliente ya lo tiene (la validación es realmente una delegación de confianza; debe comenzar en algún lugar). No obstante, la norma CA permite el envío de la CA raíz, y algunos servidores lo hacen (sobre todo por el bien de la tradición).

  • El cliente es libre de usar la cadena enviada por el servidor o de construir otra. Para un certificado dado, varias cadenas pueden ser posibles (depende de la estructura PKI). La mayoría de los navegadores web intentarán primero la cadena tal como se recibió del servidor y, en caso de fallo, volverán a intentarlo con un desarrollo de cadenas personalizado. Algunos clientes más limitados, en particular los sistemas integrados, utilizarán solo la cadena de servidores. Por lo tanto, el servidor debe enviar una cadena adecuada sin enlaces faltantes (de lo contrario, solo los clientes "inteligentes" podrán validar el certificado del servidor y, por lo tanto, conectarse con éxito).

respondido por el Thomas Pornin 24.06.2014 - 21:52
fuente
1

En SSL (y TLS), cuando un cliente entra en contacto con un servidor web habilitado para HTTPS (generalmente un navegador), responde al cliente con un mensaje "Servidor Hola", seguido rápidamente por un mensaje "Certificado". Ambos de estos mensajes aparecen, bastante fácilmente, en la traza de red que has incluido.

Sin embargo, el mensaje "Servidor Hola" no es particularmente relevante para su pregunta aquí, ya que implementa el mecanismo mediante el cual el servidor le dice al cliente qué versión del protocolo SSL o TLS ha decidido usar, y también qué cifrado Se decidió usar la suite.

El mensaje "Certificado" del servidor es bastante más interesante. Este mensaje consiste en una secuencia de uno o más certificados. El rastreo de su red muestra que su servidor en particular ha incluido tres certificados en su mensaje "Certificados".

El primer certificado en la secuencia es siempre el certificado propio del servidor. Si abre ese primer certificado en su registro de seguimiento de la red (es decir, el certificado que tiene 1406 bytes de longitud), es casi seguro que muestre el propio nombre DNS del servidor, como el valor del atributo CN (o Nombre Común). También hay un montón de otras cosas en ese primer certificado (por ejemplo, las fechas y horas de inicio y vencimiento del certificado del servidor y su clave pública). Otro elemento relevante para su pregunta aquí es el campo Emisor del certificado del servidor, que contiene la identidad del certificado de CA (Autoridad de certificación) que emitió el certificado propio del servidor.

Aquí es donde las cadenas de certificados entran en juego (como se describe en el enlace dado anteriormente por Steffen Ulrich). El certificado de un servidor web es casi siempre emitido por un certificado de nivel superior (un certificado de CA), y ese certificado de CA de nivel superior a menudo es emitido por un certificado de CA de nivel superior. Y así sucesivamente, ¡pero no infinitamente! Tiene que haber un final a la cadena de certificados de CA de nivel superior en algún lugar, y de hecho, siempre termina, en un certificado de CA "raíz". Un certificado de CA raíz no es no emitido por ningún certificado de CA de nivel superior, por lo que el dinero finalmente se detiene allí.

Lo largo y corto de todo esto es que su rastreo de red muestra que su servidor le ha enviado al cliente una cadena de tres certificados. El primer certificado será el propio certificado del servidor, como ya se mencionó. El segundo certificado será el certificado de CA que emitió el certificado de su servidor. Y el tercer certificado será el certificado de CA raíz, que emitió el segundo certificado.

Por lo tanto, el mensaje "Certificado" de su servidor contiene la cadena completa, desde el propio certificado de su servidor, hasta el certificado de CA intermedio, y finalmente hasta el certificado de CA raíz.

Cuando este pequeño lote llega al cliente, ahora el cliente tiene todo lo que necesita para verificar y probar la identidad de su servidor. Entre otras cosas, es muy importante que el cliente pueda descubrir si el certificado de CA raíz es uno en el que confía. Si el cliente no confía realmente en el certificado de CA raíz que (en última instancia) emitió el certificado de su servidor, entonces se quejará (generalmente, le dice al usuario que el certificado del servidor no es de confianza y luego le pregunta al usuario si desea hacerlo). siga adelante y continúe comunicándose con el servidor de todos modos).

Es esencial que el servidor siempre envíe al cliente su propio certificado (para que el cliente pueda verificar que la propia identidad del servidor sea la esperada). Por lo tanto, siempre habrá al menos un certificado en el mensaje "Certificado" del servidor. Sin embargo, no es absolutamente esencial que el servidor envíe también otros certificados de CA (de nivel superior) (porque el cliente podría, en principio, recurrir a otros medios para descubrir el resto de la cadena de certificados). Pero seguro que ayuda al cliente si el servidor los envía a todos. Lo que (finalmente) explica por qué está viendo que su servidor envía varios certificados.

En la parte final de su pregunta (los servidores OpenSSL, Apache y GnuTLS), creo que probablemente depende de cómo los configure. Desafortunadamente, no estoy lo suficientemente familiarizado con ellos como para saber cómo harías eso, en cada caso. Pero recomendaría que, donde sea posible, debería apuntar a que esos servidores siempre devuelvan la cadena de certificados completa al cliente, de la misma manera que se muestra en su rastreo de red.

Se puede decir mucho más sobre SSL y TLS, ¡pero ciertamente este no es el lugar! Si desea obtener más información de un verdadero experto, puedo recomendar el excelente libro (SSL, aunque ahora está algo fechado) de Eric Rescorla, "SSL y TLS - Diseñar y crear sistemas seguros", ISBN 0-201-61598-3, publicado en 2000. Sin embargo, espero que ahora tengas un poco más de tracción en tu pregunta.

    
respondido por el Slow Learner 24.06.2014 - 21:51
fuente
0

Es probable que el servidor envíe una serie de certificados que comprenden la "cadena de certificados". Por lo general, las CA no emiten certificados firmados por su clave raíz, sino por una clave intermedia, por lo que debe incluir ese certificado en su cadena para obtener el enlace entre su clave y la raíz.

Por lo tanto, los signos de clave raíz intermedios, los signos intermedios de su clave, etc. Dado que el navegador / sistema operativo solo tiene las claves raíz, debe enviarlos todo para realizar la conexión y, en algunos casos, puede haber múltiples CA intermedias certificados.

    
respondido por el David 24.06.2014 - 21:03
fuente

Lea otras preguntas en las etiquetas