如何验证已签名的DLL已经由我签名?

时间:2009-01-28 04:12:42

标签: code-signing

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

但我无法找到检测DLL已被我的某个证书签名的方法。即使使用CryptQueryObject api,我也找不到任何有用的信息。

有没有人知道如何做到这一点?或者它是否可能发生事件?

谢谢

3 个答案:

答案 0 :(得分:1)

CryptVerifyCertificateSignature不是你想要的?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您需要的版本也适用于早期版本的Windows而不是Bill Zeller向您展示的版本,您可以使用以下内容:

  1. CryptQueryObjectCERT_QUERY_OBJECT_FILE
  2. 一起使用
  3. 在前一次通话中收到的CryptMsgGetParam上使用CMSG_SIGNER_CERT_INFO_PARAM HCRYPTMSG
  4. 现在使用CertCompareIntegerBlob将已知(证书)序列号(或循环中的数字)与文件中的序列号进行比较
  5. 如果任何已知的序列号匹配,您就完成了。如果所有比较都失败,则不是您的证书。

    注意:在文件属性对话框中查看证书的序列号时,与PCERT_INFOCERT_INFO::SerialNumber的内容进行比较时,显示的字节顺序相反{1}})你来自CryptMsgGetParam。因此,请确保在比较之前将自己的序列号反转或反转。

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