estamos en el proceso de reemplazar los certificados con el hash SHA1 debido al movimiento de Google para que aparezcan menos seguros en Chrome. Los certificados de reemplazo utilizan una CA intermedia diferente a la que estamos usando actualmente, pero la misma CA raíz. Durante las pruebas, notamos que nuestros clientes SSL no validarían la cadena con los nuevos certificados, no entendemos por qué.
Aquí están los detalles:
Actualmente, la cadena que envía el servidor se ve así:
- CA raíz, firmada por el servidor CA X de la misma autoridad (vino con el certificado del servidor)
- CA intermedia 1 (vino con certificado de servidor)
- Certificado de servidor
en nuestros clientes SSL confiamos:
- CA raíz, autofirmada, pero con el mismo CN y la misma clave (mismo deslizamiento). (Descargado de la autoridad; igual que Mozilla incorpora en sus productos)
- CA intermedia 1 (idéntica a la que envía el servidor)
Esto funciona con la cadena de certificados actual, pero solo porque confiamos en la CA intermedia 1. Si eliminamos esto, falla porque el servidor CA X no es de confianza. Obviamente, los nuevos certificados no funcionan porque están firmados por una CA intermedia diferente.
Ahora, después de leer RFC 5280, sección 6.1, tengo la impresión de que nuestro cliente SSL no cumple con los estándares, porque de lo que he leído que entiendo la validación de una ruta de certificado es esto (simplificado):
- comience con el ancla de confianza; validar si todavía es válido (hora), etc.
- para los siguientes certificados: verifique si el CN y la clave del certificado anterior coinciden con los emisores CN y la clave del certificado actual (y verifique las restricciones de acceso, etc.)
- el último certificado no debe ser un certificado de CA
El punto es: nuestro cliente SSL no puede validar la cadena porque el certificado raíz que está configurado para usar como un ancla de confianza tiene un emisor diferente al certificado raíz presentado por el servidor. Sin embargo, CN y clave son idénticas para ambos. Desde mi entendimiento de lo que he leído en RFC 5280, el cliente SSL no debería preocuparse por el emisor de su ancla de confianza. Tampoco hay políticas definidas en los certificados dentro de la cadena que puedan hacer cumplir algo así. Sin embargo, no sé si nuestro cliente SSL puede aplicar políticas adicionales que conduzcan a esto (no a mi sistema).
Entonces, mi pregunta es: ¿Nuestro cliente SSL se comporta correctamente en este escenario o no? Y por supuesto: ¿por qué?
Gracias de antemano
Editar: Sé que el servidor debería solo enviar el certificado CA intermedio y no el certificado raíz, sin embargo, estamos usando lo que la autoridad proporcionó como un lío Junto al certificado, que incluía el certificado raíz. Además, por lo que sé, el cliente debe ignorar el certificado raíz enviado por el servidor en ese caso.
También es extraño que el cliente se comporte como si validara la cadena desde el certificado del servidor hasta algo en lo que puede confiar y luego se detiene, mientras que las especificaciones dicen que debería validar la cadena desde el ancla de confianza hasta el certificado del servidor.
Edit2: Las diferentes "versiones" del certificado Root CA tienen el mismo SKID; solo difieren en el número de serie y del emisor (por supuesto).
Además, simplemente pensé que, a partir de la información de la primera edición, parece que el cliente SSL necesita que el certificado raíz de confianza y la cadena sean idénticos en su emisor y posiblemente en el número de serie para aceptarlo.