我遇到了与本主题相同的问题:无法使用有效的 Sectigo 代码签名证书签署 VBA 基本上,我有一个带有 USB 记忆棒的 Sectigo EV 代码签名证书,我需要插入该 USB 记忆棒才能对我的代码进行签名。我使用它来签署 Visual Studio 中的 excel 加载项(DLL)以及我们使用 Signtool 构建的 .msi 文件:
signtool 符号 /tr http://timestamp.comodoca.com /td sha256 /fd sha256 /d Prog2Installer.msi /a C:\Users\hello\source epos\ME\Prog2 在\Release\Prog2mInstaller.msi
效果很好,我收到一个弹出窗口,要求我输入密码,并且签名正常。
但现在我也想使用我的证书来签署我的 excel/VBA xlsm 文件。当我插入 USB 密钥时,我可以在 VBE 中选择证书(名为“由 Sectigo 浏览器扩展安装”),但是当我保存文件时,我得到与引用的帖子相同的反馈:
数字证书有问题。无法签署 VBA 项目。签名将被取消
我检查了 certmgr,可以看到那里的证书,但无法导出为 .pfx,只能导出为 .cer(因此没有私钥,因为我假设它们驻留在 USB 记忆棒上)。我还添加了参考帖子中建议的 3 个时间戳项目,但仍然没有。
Sectigo/Comodo 似乎没有任何线索(尝试过他们的服务台),我希望这里的任何人都可以建议我该怎么做才能让它发挥作用?
我收到了 Sectigo 的回复 - 他们已经联系了证书令牌制造商。看起来这确实是 Microsoft 的问题 - 在签署 VBA 代码时需要 MD5 哈希 - 尽管这不再被认为是安全的。
作为解决方法,如果您正在使用 Safenet 并且您的令牌仍支持 MD5,则可以进行以下注册表更改:
然后,按照通常的方式将签名添加到VBA中。就我而言,保存文件时,它会在完成保存之前询问令牌密码三次。
除非对签署 VBA 代码的 MD5 要求进行更改,否则将来根本不可能签署 VBA 代码(即没有证书提供商支持它)。因此,我建议人们联系微软,敦促他们针对这个问题采取行动。
我与他们的服务台进行了一些电话交谈。我对这些对话的总结:这是微软的问题...我没有向 MSFT 提交任何文件,但由于我需要工作证书,所以我为我的 DLL/Visual studio 进行了 EV 代码签名(工作正常)并购买了一个简单的代码签名证书来签署我的 VBA/Excel。经过一番摆弄后,它就可以正常工作了。所以我支付 580 美元/年 vs 400 美元/年,但有一个可行的解决方案。
所以我现在是 Schrodinger Sectigo 的客户,既高兴又不高兴。
我也有同样的问题。 @neilt17 的解决方案对我来说效果很好,但我还发现了 Microsoft 的建议,将 VBA 特定的注册表项更改为更好的哈希算法:
使用商业证书的用户可能会因为以下原因遭遇封锁: 签名中支持的哈希算法的限制。您可以添加一个 DWORD 注册表键值 V1HashEnhanced 选择另一个哈希值 算法,在 HKCU\SOFTWARE\Microsoft\VBA\Security 下 值算法规则(1 到 SHA1、2 到 SHA256、3 到 SHA384、4 到 SHA512 和其他到 MD5)。该设置在最新版本中可用 CC 频道的版本。
我决定采用 Microsoft 的 VBA 特定解决方案。