我创建了一个自签名证书来签署DLL。当我将此DLL加载到我的C ++应用程序中时,我可以使用WinVerifyTrust api验证代码签名证书是否有效。
但我无法找到检测DLL已被我的某个证书签名的方法。即使使用CryptQueryObject api,我也找不到任何有用的信息。
有没有人知道如何做到这一点?或者它是否可能发生事件?
谢谢
答案 0 :(得分:1)
答案 1 :(得分:0)
如果您使用私有键签署证书,则只能使用 public 键进行验证。这就是公钥加密的工作原理。如果您可以使用公钥来验证签名,那么您就知道相应的私钥必须已用于签名。
答案 2 :(得分:0)
如果您需要的版本也适用于早期版本的Windows而不是Bill Zeller向您展示的版本,您可以使用以下内容:
CryptQueryObject
与CERT_QUERY_OBJECT_FILE
CryptMsgGetParam
上使用CMSG_SIGNER_CERT_INFO_PARAM
HCRYPTMSG
CertCompareIntegerBlob
将已知(证书)序列号(或循环中的数字)与文件中的序列号进行比较如果任何已知的序列号匹配,您就完成了。如果所有比较都失败,则不是您的证书。
注意:在文件属性对话框中查看证书的序列号时,与PCERT_INFO
(CERT_INFO::SerialNumber
的内容进行比较时,显示的字节顺序相反{1}})你来自CryptMsgGetParam
。因此,请确保在比较之前将自己的序列号反转或反转。
另请注意:您仍然需要将证书安装为受信任,以便WinVerifyTrust
(上面未提及)考虑信任的代码签名。我刚刚描述了关于如何找到它自己使用的证书的部分。