Validar certificado de raíz de firma de código sin conexión

1

Estoy desarrollando una biblioteca distribuida como una DLL de Windows a la que pueden llamar los ejecutables de terceros. Espero que el EXE de llamada esté firmado digitalmente y necesito verificarlo.

No tengo control sobre la computadora en la que se ejecutará mi código. ¿Cómo validar si el ejecutable de llamada está firmado por una CA reconocida y confiable, como Verisign o Symantec, en la parte superior de la cadena de certificados? Necesito hacer esto sin conexión.

He considerado lo siguiente:

  1. Busque las cadenas "Verisign" y "Symantec" en el certificado tema.
  2. Compare los números de serie del certificado. contra una lista de números de serie. conocido para ser válido.
  3. Compare la huella digital del certificado con una lista de huellas digitales conocidas.

Sin embargo, sé que 1 y 2 pueden ser falsificados. Acerca de 3, no estoy seguro acerca de la suplantación de identidad, pero ¿qué tan confiable es cuando se considera la caducidad y la revocación?

    
pregunta Agnel Kurian 20.05.2016 - 07:46
fuente

1 respuesta

2

Primero, debe solicitar a Windows que valide la firma en el EXE. Su DLL puede hacer esto utilizando la API WinVerifyTrust (), y Microsoft proporciona un código de ejemplo para hacerlo aquí .

Eso te dirá que Windows con el que estás ejecutando está satisfecho con la firma en el EXE. Una máquina maliciosamente configurada podría tener un EXE firmado con un certificado autoemitido que se había instalado en la máquina, por lo que no cumple con todos sus requisitos, pero al menos obliga al oponente a hacer su trabajo a fondo.

Luego, para verificar los certificados, use CertGetCertificateChain (), seguido de CertVerifyCertificateChainPolicy (). Puede solicitar a estas funciones que verifiquen la revocación y realizar otras comprobaciones: vale la pena leer su documentación detenidamente. Hay un programa de ejemplo aquí .

A través de estas API, puede obtener las estructuras CERT_INFO para los certificados en la cadena apropiada, y puede verificar las que desee.

    
respondido por el John Dallman 27.09.2016 - 16:54
fuente

Lea otras preguntas en las etiquetas