【问题标题】:Validate signature on EXE with CertGetCertificateChain使用 CertGetCertificateChain 在 EXE 上验证签名
【发布时间】:2009-07-14 19:47:44
【问题描述】:

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

我在这里找到了类似的帖子, Validate Authenticode signature on EXE - C++ without CAPICOM

除其他外,Microsoft 文档似乎指向 CertGetCertificateChain,但这些示例往往适用于商店中的证书。有谁知道如何使用 CertGetCertificateChain 和相关 API 验证签名的可执行文件?

【问题讨论】:

    标签: winapi exec certificate


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

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

    这是真的;没有办法解决这个问题,否则无法相信签名者就是他所说的那个人,如果证书被欺诈性使用,提供者也无法撤销证书。

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

    【讨论】:

    • 需要两条信息。 - 应用签名了吗? - 谁是签名者?验证可执行文件 WinVerifyTrust 是否有效。但是,卡在如何知道谁是签名者上。有人(MSalters)回复了原始帖子说 CertGetCertificateChain 会有所帮助。但是,无法弄清楚如何从磁盘上的可执行文件转到 CertGetCertificateChain 的所有奇数 parm 类型。
    • 听起来 Josh K 为您指明了正确的方向。如果没有,我可以挖掘一些我编写的旧代码并生成一个示例。 WinVerifyTrust 是关键一步;除此之外,这只是一些需要跳过的环节,在 msdn 和类似内容中没有很好地解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2010-09-22
    • 2019-11-21
    • 2020-06-11
    • 1970-01-01
    • 2011-09-22
    • 2012-08-22
    相关资源
    最近更新 更多