c++ - instalar - no se pudo crear el certificado predeterminado
Validar la firma de Authenticode en EXE-C++ sin CAPICOM (2)
Si la firma es válida, su cadena de certificados contendrá su certificado. CertGetCertificateChain obtendrá esa cadena.
Estoy escribiendo una función para una DLL del instalador para verificar la firma Authenticode de los archivos EXE ya instalados en el sistema.
La función necesita:
A) verificar que la firma sea válida.
B) verificar que el firmante es nuestra organización.
Debido a que esto se encuentra en un instalador, y debido a que esto necesita ejecutarse en instalaciones anteriores de Win2k, no deseo confiar en CAPICOM.dll, ya que puede no estar en el sistema de destino.
La API WinVerifyTrust funciona muy bien para resolver (A).
Necesito encontrar una forma de comparar un certificado conocido (o propiedades) con el que firmó el EXE en cuestión.
Deberías usar CryptQueryObject .
Este artículo de KB demuestra el uso: Cómo obtener información de ejecutables firmados de Authenticode .
Para el comentarista que preguntó cómo hacerlo sin las API de Windows, no conozco ninguna biblioteca que pueda hacerlo, pero el formato está documentado aquí: Windows Authenticode Portable Executable Signature Format