Suponga que tiene una cadena de certificado (X509 v3) que se le envía para su validación. La cadena que se le envió puede o no incluir el certificado de CA raíz. ¿Hay una manera confiable de averiguar si este es el caso?
Obviamente, solo el certificado en la parte superior de la jerarquía puede ser el certificado de CA raíz, pero ¿cómo puedo verificar esto? Se me ocurrió un cheque para la igualdad entre el emisor y el sujeto, y esto parece funcionar bien para todos los casos que encontré hasta ahora, pero no estoy seguro de si es infalible.
Editar: No se trata de una verificación manual o acerca de qué herramienta usar, se trata de una verificación programática. Por lo tanto, usar openSSl para realizar comprobaciones (como se sugiere en un reclamo de 'posible duplicado') no es una opción. La pregunta es qué atributos o extensiones de certificado puedo usar de qué manera para identificar de manera confiable un certificado de CA raíz en una cadena dada.
Para hacer la pregunta aún más al punto: sugerí verificar si subject==issuer
desde el principio. La pregunta es si este es un enfoque infalible. Entonces, ¿es posible confiar en el hecho de que esto es cierto solo si es un certificado raíz? ¿Qué sucede si creo un certificado raíz y un certificado de CA intermedio derivado y, en este último, simplemente elijo el asunto igual al emisor? ¿Eso resultará en un certificado válido? (El identificador de clave de autoridad puede apuntar correctamente al identificador de clave de la CA raíz).
(Tenga en cuenta que no me pregunto cómo verificar si debo confiar en la cadena. Quiero saber cómo identificar de manera confiable un certificado de CA raíz en una cadena).