我创建了一个自生成的证书来签署一个 DLL。当我将此 DLL 加载到我的 C++ 应用程序中时,我可以使用 WinVerifyTrust api 验证代码签名证书是否有效。
但我无法找到一种方法来检测 DLL 是否已由我的一个证书签名。即使使用 CryptQueryObject api,我也找不到任何有用的信息。
有谁知道如何做到这一点?还是有可能发生?
谢谢
我创建了一个自生成的证书来签署一个 DLL。当我将此 DLL 加载到我的 C++ 应用程序中时,我可以使用 WinVerifyTrust api 验证代码签名证书是否有效。
但我无法找到一种方法来检测 DLL 是否已由我的一个证书签名。即使使用 CryptQueryObject api,我也找不到任何有用的信息。
有谁知道如何做到这一点?还是有可能发生?
谢谢
如果您使用您的私钥签署证书,则只能使用您的公钥对其进行验证。这就是公钥密码学的工作原理。如果您可以使用公钥来验证签名,那么您就知道必须使用相应的私钥对其进行签名。
如果您需要的版本也适用于比 Bill Zeller 向您展示的 Windows 的早期版本,您可以使用以下内容:
CryptQueryObject与_CERT_QUERY_OBJECT_FILECryptMsgGetParamwithCMSG_SIGNER_CERT_INFO_PARAMHCRYPTMSGCertCompareIntegerBlob将您已知的(证书)序列号(或循环中的数字)与文件中的序列号进行比较如果任何已知的序列号匹配,您就完成了。如果所有比较都失败,那不是你的证书。
注意:在文件属性对话框中查看证书的序列号时,与PCERT_INFO您CERT_INFO::SerialNumber从CryptMsgGetParam. 因此,请确保在比较之前将您自己的序列号颠倒或颠倒存储。
另请注意:您仍然需要将证书安装为受信任的,以便WinVerifyTrust(上面未提及)认为代码签名完全受信任。我刚刚描述了有关如何找出使用的是您自己的证书的部分。