Estoy tratando de entender los mecanismos prácticos de los certificados de firma cruzada (intermedios). A modo de ejemplo, estoy viendo Let's Encrypt Chain of Trust . Esa página menciona:
IdenTrust ha firmado nuestros productos intermedios. Esto permite nuestro fin. Los certificados serán aceptados por todos los navegadores principales mientras propagamos nuestra propia raíz.
Además, la página contiene enlaces a ambos el certificado intermedio firmado con la clave privada que pertenece a su propia raíz de ISRG así como el certificado intermedio firmado con la clave privada pertenece a la CA de IdenTrust .
Mi expectativa era ver esos dos certificados intermedios en el cable al configurar una conexión TLS con www.letsencrypt.org, dejando que el cliente decida cuál de los dos intermedios utilizará para construir una cadena de confianza. Sin embargo, solo veo el intermedio firmado por IdenTrust.
He observado esto con Wirehark, analizando el tráfico TLS mientras navegué por www.letsencrypt.org con mi navegador web. Para forzar "la otra" cadena de confianza, no confié en el certificado DST Root CA X3 en la aplicación Keychain Access (estoy en una Mac) y, de hecho, ya no pude navegar por el sitio. Luego agregué el certificado ISRG Root X1, lo que indica que siempre debe confiar en él pero todavía no puedo navegar por el sitio. Esto es compatible con mi observación de que el servidor nunca proporciona el certificado intermedio firmado por ISRG.
También probé la aplicación openssl s_client
, pero fue en vano.
Supongamos que confío en la Raíz ISRG y no en IdenTrust, ¿cómo hago que el servidor comparta conmigo el certificado intermedio firmado por la Raíz ISRG? O, de manera más general, se pregunta si hay múltiples cadenas de confianza disponibles, por ejemplo, debido a la firma cruzada, ¿cómo se comparten los certificados de ambas cadenas con los clientes? ¿Por qué no recibo un paquete que contenga ambos certificados para el intermedio?
Actualización: la primera respuesta indica que la especificación TLS no permite el intercambio de múltiples cadenas de certificados. Eso explica mucho.
Sin embargo, mis expectativas están determinadas por las respuestas a la pregunta ¿Cuál es el uso de certificados de firma cruzada en X.509? . La respuesta aceptada allí menciona: "Se trata de expandir la confianza" y "aumentar la facilidad de verificación de confianza, como en las situaciones en las que tiene clientes que confían en CA1 o CA2 (pero no en ambos). -signar un certificado para que ambos confíen ".
Si solo se permite el intercambio de una cadena, eso no parece ser "expandiendo la confianza" sino más bien como "modificar la confianza". Además, para un servidor en particular, si tiene que seleccionar una cadena en particular, el argumento de "facilidad de verificación" tampoco es válido, al menos no si su único mecanismo disponible es el protocolo de enlace TLS. ¿Es eso correcto?