【问题标题】:How to validate a signed DLL has been signed by me?如何验证已签名的 DLL 是否已由我签名?
【发布时间】:2009-01-28 04:12:41
【问题描述】:

我创建了一个自行生成的证书来签署一个 DLL。当我将此 DLL 加载到我的 C++ 应用程序中时,我可以使用 WinVerifyTrust api 验证代码签名证书是否有效。

但我无法找到一种方法来检测 DLL 是否已由我的一个证书签名。即使使用 CryptQueryObject api,我也找不到任何有用的信息。

有没有人知道如何做到这一点?还是有可能?

谢谢

【问题讨论】:

    标签: code-signing


    【解决方案1】:

    CryptVerifyCertificateSignature 不是你想要的吗?

    【讨论】:

      【解决方案2】:

      如果您使用您的 private 密钥签署证书,则只能使用您的 public 密钥对其进行验证。这就是公钥密码学的工作原理。如果您可以使用公钥来验证签名,那么您知道相应的私钥必须已用于签名。

      【讨论】:

        【解决方案3】:

        如果您需要的版本也适用于比 Bill Zeller 向您展示的版本更早的 Windows 版本,您可以使用以下版本:

        1. 使用CryptQueryObjectCERT_QUERY_OBJECT_FILE
        2. 在上一次通话中收到的HCRYPTMSG 上使用CryptMsgGetParamCMSG_SIGNER_CERT_INFO_PARAM
        3. 现在使用CertCompareIntegerBlob 将您已知的(证书)序列号(或循环中的数字)与文件中的序列号进行比较

        如果任何已知的序列号匹配,您就完成了。如果所有比较都失败,那不是你的证书。

        注意:在文件属性对话框中查看证书的序列号时,与PCERT_INFO (CERT_INFO::SerialNumber ) 你从CryptMsgGetParam 得到。因此,请确保在比较之前将自己的序列号颠倒或颠倒存储。

        另请注意:您仍需要将证书安装为受信任,以便WinVerifyTrust(上文未提及)认为代码签名完全受信任。我刚刚描述了关于如何找出使用的是您自己的证书的部分。

        【讨论】:

          猜你喜欢
          • 2020-03-15
          • 1970-01-01
          • 2017-12-24
          • 2013-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多