Evalúe la firma de un certificado X509 en .NET

2

Este es mi escenario:

Una CA firma un certificado con su clave privada y lo envía a un cliente a través de la respuesta https. Desde esta respuesta, el cliente crea una clase X509Certificate2, que representa el certificado en .NET

X509Certificate2 myCert = new X509Certificate2(certBuffer);

También tengo la clave pública de la CA para verificar la firma

RootCertificate.PublicKey.Key

Ahora estoy buscando una manera de verificar si la firma es válida. ¿Cómo puedo hacer eso? La clase X509Certificate2 no parece proporcionar una forma de acceder al campo de firma.

    
pregunta PogoMips 01.10.2013 - 15:30
fuente

1 respuesta

4

La validación del certificado X.509 es un proceso complejo . Con .NET, se supone que debe utilizar X509Chain class para realizar dicha validación, lo que implica la construcción de rutas, la verificación de firmas, el estado de revocación y un billón de otras cosas. Consulte esta respuesta para ver un ejemplo.

X509Certificate2 también tiene un método Verify() , pero ese chequea el certificado con respecto a los valores predeterminados de la máquina: el almacén de confianza del usuario, las políticas del usuario ... que pueden o no estar bien asignadas a su caso específico. Para tener control total sobre el proceso, use X509Chain .

(Extraer el valor de firma y la secuencia exacta de bytes que se firma, no es demasiado complejo si conoce un poco de ASN.1 / DER, pero el punto es que la validación de certificados es mucho más que simples firmas. Hacer las cosas manualmente es un camino que he recorrido personalmente varias veces y conlleva mucho sufrimiento. El uso de la implementación que ya proporcionó .NET le ahorrará mucho tiempo, y esa implementación es X509Chain .)

    
respondido por el Tom Leek 01.10.2013 - 15:59
fuente

Lea otras preguntas en las etiquetas