Winapi 使用CertGetCertificateCain验证EXE上的签名

Winapi 使用CertGetCertificateCain验证EXE上的签名,winapi,exec,certificate,Winapi,Exec,Certificate,我想验证已签名的可执行文件。要求是验证可执行文件本身是否有效以及它来自何处(可能来自证书的主题)。证书类型为PKCS 我在这里发现了一个类似的帖子, 除其他外,Microsoft文档似乎指向CertGetCertificateChain,但这些示例倾向于使用存储中的证书。有人知道如何使用CertGetCertificateChain和相关API验证已签名的可执行文件吗?您能详细说明一下吗?您链接的问题似乎提供了您需要的所有答案 您声明“示例倾向于使用存储中的证书”,我认为这意味着需要使用链接到

我想验证已签名的可执行文件。要求是验证可执行文件本身是否有效以及它来自何处(可能来自证书的主题)。证书类型为PKCS

我在这里发现了一个类似的帖子,


除其他外,Microsoft文档似乎指向CertGetCertificateChain,但这些示例倾向于使用存储中的证书。有人知道如何使用CertGetCertificateChain和相关API验证已签名的可执行文件吗?

您能详细说明一下吗?您链接的问题似乎提供了您需要的所有答案

您声明“示例倾向于使用存储中的证书”,我认为这意味着需要使用链接到机器受信任存储中的根证书的证书对可执行文件进行签名

这是真的;这是无法避免的,否则就无法相信签名者就是他所说的那个人,如果证书被欺诈使用,提供者也无法撤销证书


因此,WinVerifyTrust是验证已签名可执行文件的正确方法。这是一个糟糕的API,所以要小心。CryptQueryObject和相关API将为您提供更多信息,例如证书颁发给的个人或公司的名称。

我问了这个问题。我有你的确切要求。这里有一些示例代码可以帮助您。玩得开心

需要两条信息。-应用程序是否已签名?-签名人是谁?验证可执行文件WinVerifyTrust是否有效。然而,我被困在如何知道谁是签名者的问题上。有人(MSalters)回复了最初的帖子,说CertGetCertificateChain会有所帮助。但是,我不知道如何从磁盘上的可执行文件转换到CertGetCertificateChain的所有奇怪的parm类型。听起来Josh K为您指明了正确的方向。如果没有,我可以挖掘一些我编写的旧代码并生成一个示例。WinVerifyTrust是关键步骤;除此之外,msdn和类似文件中没有很好地解释的只是一些需要跳过的环。太好了。注释()中的一个链接非常好。谢谢!