如何验证已签名的DLL文件是否由我签名?

5
我已经创建了一个自动生成的证书来签名DLL。当我将这个DLL加载到我的C++应用程序中时,我可以使用WinVerifyTrust API验证代码签名证书是否有效。
但是,我无法找到一种方法来检测该DLL是否已由我的证书之一签名。即使使用CryptQueryObject API,我也没有找到任何有用的信息。
有人知道如何做到这一点吗?或者这是可能的吗?
谢谢。
3个回答

1

0

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

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

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

注意:在查看文件属性对话框中证书的序列号时,与从CryptMsgGetParam获取的PCERT_INFOCERT_INFO::SerialNumber)的内容相比,那里显示的字节顺序相反。因此,请确保在比较之前将自己的序列号存储为反向或将其反转。

另外请注意:您仍需要将证书安装为可信,以便WinVerifyTrust(未在上述提到)认为代码签名是可信的。我只是描述了如何找出使用了您自己的证书的部分。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接