5

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

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

有谁知道如何做到这一点?还是有可能发生?

谢谢

4

3 回答 3

1

CryptVerifyCertificateSignature不是您想要的?

于 2009-01-28T04:49:35.450 回答
0

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

于 2009-01-29T02:48:53.320 回答
0

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

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

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

注意:在文件属性对话框中查看证书的序列号时,与PCERT_INFOCERT_INFO::SerialNumberCryptMsgGetParam. 因此,请确保在比较之前将您自己的序列号颠倒或颠倒存储。

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

于 2012-08-20T20:30:48.430 回答