Comprobación de la cadena de certificados

8

Tengo una pregunta muy específica.

Un cliente verifica un servidor tomando el certificado y verificando valores específicos y que la firma digital de la CA intermedia es correcta (de acuerdo con la clave pública almacenada en la computadora del cliente).

  • Opción A: ¿El cliente no se asegura de que la firma de la CA intermedia (firmada por la CA raíz) sea válida, y que la firma digital de la raíz (autofirmada por la CA raíz) se correlacione con la clave pública almacenada en la computadora?

O

  • Opción B: El cliente ve que la firma digital del servidor es correcta y, por lo tanto, utiliza la información almacenada en el almacén de certificados para completar el resto de la cadena (es decir, si se utilizó el Certificado B para firmar el certificado del servidor, entonces mi almacén de certificados dice que el certificado) A se usó para firmar el certificado B y, por lo tanto, lo mostraré como el resto de la cadena)

Entiendo que toda la cadena está instalada en el servidor, pero ¿el cliente utiliza todos los certificados?

Esto se debió a mi interés general y experimenté un caso en el que el certificado intermedio no se instaló correctamente y Google Chrome e Internet Explorer lo aceptaron, pero Firefox 4.0 no lo hizo.

Espero haber hecho mi pregunta lo más clara posible.

He tomado algunos de los otros pasos utilizados en la validación de SSL con el propósito de no confundir la pregunta.

Nota: había una imagen invisible asociada con esta pregunta que descubrí al editar:

    
pregunta Christopher 13.06.2013 - 09:47
fuente

3 respuestas

11

El servidor proporcionará su propio certificado, y opcionalmente (pero se recomienda) todos los certificados de CA intermedios en la cadena (también conocido como CA bundle ). No es necesario que proporcione el certificado CA raíz de la cadena, y el cliente debe ignorar ese certificado si se proporciona en el paquete de todos modos, consulte esta pregunta para más detalles sobre eso. Dado que el paquete completo es posiblemente una sobrecarga innecesaria, en el futuro el cliente podrá declararlo tiene una copia en caché del mismo para reducir la configuración de la conexión.

El punto de validación es que el cliente debe poder verificar toda la cadena hasta una raíz confiable, por lo que ya debe tener una copia de la raíz y debe tener u obtener todos los intermedios.

Si al cliente le faltan certificados CA intermedios, puede confiar en los proporcionados por el servidor siempre que sean verificables, luego puede completar cualquier parte faltante utilizando sus copias locales de certificados CA. Este es el método utilizado para las actualizaciones intermedias de certificados CA, de modo que los clientes pueden actualizarse fácilmente (no hay un sistema de obtención o publicación de certificados X.509 ampliamente implementado análogo a los servidores de claves PGP). Puede haber cero, uno o muchos certificados intermedios en una cadena.

Cada certificado tiene solo los detalles de identificación de su emisor / padre inmediato (es decir, no toda la cadena); esto se registra en el campo DN del Emisor , y es más útil en el campo AKID ( AKID / SKID PDF). El nombre legible de Emisor no puede identificar de forma exclusiva un certificado específico (no registra el número de serie específico). El SKID (Identificador clave del sujeto) es efectivamente una huella digital de un certificado, y el AKID (Authority Key Identifier) es la huella digital de su emisor, esto funciona como una lista de enlaces individuales del finalice el certificado (idealmente) hasta una raíz confiable (aunque los certificados más antiguos a menudo carecen de esos campos, por lo que se usan los DN en su lugar).

  • Comenzando con la cadena provista por el servidor (si está presente), el cliente debe trabajar en la lista, puede agregar los certificados intermedios que faltan a su tienda, si son válidos.
  • Luego, el cliente debe rastrear la copia de seguridad desde el certificado del servidor, usualmente usando el campo AKID para ubicar el certificado del emisor específico (padre), verificar y trabajar hasta que llegue a una raíz autofirmada confiable.

Los términos asociados con este proceso son Creación de rutas de certificación y Certification Path Validation . No hay una sola "manera correcta" de hacerlo. Un cliente robusto comprobará de extremo a extremo, los navegadores suelen ofrecer un bypass (con advertencias escritas con severidad), y en algunos sistemas puede limitar la profundidad del certificado final para verificarlo como una optimización.

(La comprobación de la validez incluye la firma / hash, intervalo de fechas, CRL, OCSP, pinning etc. y posiblemente DANE .)

Esto se superpone con ambas opciones, además de la autoactualización de certificados de CA intermedios.

    
respondido por el mr.spuratic 13.06.2013 - 11:22
fuente
0

La cadena de confianza se verifica comenzando en el certificado del servidor y verificando las firmas hasta que se encuentre una raíz confiable. Por lo tanto, la firma del certificado del sitio se verifica con el certificado público de la CA intermedia. Sin embargo, la CA intermedia no es confiable, por lo que la firma del certificado público de la CA intermedia se valida frente al certificado público de la CA raíz. Dado que la firma es válida (y no hay entradas en la lista de revocaciones que indiquen que ya no debería ser válida), la CA intermedia (y por lo tanto el Certificado del servidor) hereda la confianza del certificado raíz de confianza.

El proceso puede continuar durante tantas generaciones de la jerarquía como sea necesario hasta que se alcance un certificado de confianza. Si el certificado del servidor se hubiera agregado manualmente al repositorio de certificados de confianza en la máquina local, por ejemplo, la firma de la CA intermedia no se hubiera verificado nunca, ya que no es necesario obtener Trust.

    
respondido por el AJ Henderson 13.06.2013 - 15:30
fuente
0

Normalmente, el servidor no envía todas las cadenas de certificados de forma predeterminada. Depende de cómo esté configurado el servidor y de si todas sus cadenas de certificados se incluyen o no en el almacén de claves del servidor web.

Para lograr esto en la configuración del cliente del Servidor Openssl, uno tiene que concatenar todo su intermedio con su propio certificado. Los certificados deben estar en el orden de su propio certificado al principio y el certificado intermedio que lo firmó en el siguiente y así sucesivamente (se puede ignorar la concatenación de CA raíz ya que existe en el cliente). Y use la misma lista de cadenas de certificados con SSL_CTX_use_certificate_chain_file en el lado del servidor. Ahora en el cliente, es suficiente tener solo un certificado de CA raíz para verificar esta cadena de certificados.

Hay otro enfoque que es contrario a esto. El servidor simplemente envía su propio certificado (firmado por Intermediate cert y Intermediate by Root CA) en el protocolo SSL. Aquí, el cliente debe tener certificados de CA intermedios y raíz para verificar la cadena completa. El cliente concatena Intermediate y Root CA en el orden de Root CA al principio, seguido de un certificado Intermediate y así sucesivamente. (Se puede ignorar la concatenación del certificado del servidor en esta lista). El cliente puede usar la API SSL_CTX_use_certificate_file e incluir este archivo concatenado para verificar el certificado del servidor.

    
respondido por el Shivakumar Lagaloti 18.04.2018 - 13:32
fuente

Lea otras preguntas en las etiquetas