gpt4 book ai didi

c# - 代码签名不再有效

转载 作者:可可西里 更新时间:2023-11-01 10:41:59 28 4
gpt4 key购买 nike

我们有一个遗留的 Windows 工作流程流程,它使用 SignerSign 将数字签名应用于 EXE。我们正在从 Windows Workflow 流程中迁移出来,因此我一直在为我们的新流程准备一个工具来执行相同的签名操作。我将工作流事件中的代码签名代码复制/粘贴到新项目中的类中,但在尝试运行它时遇到错误。

代码的粗略概述是:

  • CertOpenStore用于打开包含私钥和证书的PFX文件。
  • 通过对生成的证书存储句柄调用 CertEnumCertificatesInStore 获取证书上下文。
  • SignerSign 被调用,SIGNER_SUBJECT_INFO 指向目标 EXE 文件,SIGNER_CERT 指向上一步的证书上下文, SIGNATURE_SIGNER_INFO 指定应使用 SHA-1 算法。 (我已尝试将算法更改为 SHA-2 512,结果没有任何变化。)pProviderInfo 参数为 NULL
  • 单独调用 SignerTimeStamp 以将时间戳应用于签名。代码中的注释表明,如果使用 SignerSignpwszHttpTimeStamp 参数,它会返回 HRESULT 0x80070020(“正在使用文件”?)

当我尝试在 Windows 10 64 位上运行此代码时,无论是从 32 位还是 64 位进程,我都会收到错误 HRESULT 0x80092006“没有为商店或对象指定提供程序。”。我尝试提供 pProviderInfo 并将提供程序名称设置为“Microsoft Strong Cryptographic Provider”(在 API Monitor 跟踪输出中看到 SignTool.exe 签署可执行文件时的输出 - 这有效)但它没有影响结果。

有谁知道这个错误的确切含义以及如何修复它?

最佳答案

我完全不知道为什么会这样,但是通过修改我的代码,它可以做我在 Rohitab 的 API 监视器中看到的 SignTool 做的同样的事情,然后将位削减到看起来是最小的工作集,现在再次签署文件:

  • 代替CertOpenStore ,. PFXImportCertStore用于打开 PFX 文件并生成 HCERTSTORE .这需要将 PFX 加载到内存中,以便它可以作为 CRYPT_DATA_BLOB 传入。 -- 没什么大不了的。
  • 使用 CertEnumCertificatesInStore 获得证书上下文和以前一样。
  • CertGetCertificateChain用于生成的证书上下文,具有不受限制的 CERT_CHAIN_PARA和旗帜 CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING | CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS | CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT .没有指定额外的商店。当我最初写这篇文章时,根据 API Monitor 结果,我定义了 CERT_CHAIN_PARA_HAS_EXTRA_FIELDS并按照 API Monitor 捕获显示的方式填充它们,但我继续得到 S_OK来自 SignerSign与短CERT_CHAIN_PARA结构也是如此。
  • SignerSign像以前一样被调用,除了一个虚拟集合类型的商店作为 hCertStore 传入的 SIGNER_CERT_STORE_INFO嵌套在 SIGNER_CERT 中的结构.此虚拟集合类型商店是通过调用 CertOpenStore 创建的两次,一次用 CERT_STORE_PROV_COLLECTION和标志 CERT_STORE_CREATE_NEW_FLAG和一次 CERT_STORE_PROV_MEMORY指定编码 PKCS_7_ASN_ENCODING | X509_ASN_ENCODING ,然后使用 CertAddStoreToCollection 将内存存储添加到集合存储中.

如果未指定虚拟集合类型存储,则 SignerSign提示它找不到通往受信任根的路径。请注意,我在测试中使用的证书是自签名的,因此没有到受信任根的路径。对于确实具有通往受信任根路径的代码签名证书,虚拟集合类型存储可能不是必需的,我目前没有测试的方法。

无论如何,我希望这有助于为可能遇到 SignerSign 问题的任何其他人解决此问题。 . :-)

关于c# - 代码签名不再有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894179/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com