无法使用有效的 Sectigo 代码签名证书签署 VBA

Unable to sign VBA with valid Sectigo Code Signing certificate

我们正在使用 Sectigo 代码签名证书(仅 OV - 组织验证,而非 EV)来签署我们的 .exe 应用程序。最近几年没问题

现在我们正在尝试使用相同的证书在 Word/Excel 中签署 VBA 但没有成功。当我打开 VBA editor -> Tools -> Digital Signature -> Select Sectigo cert -> ok -> close VBA and save Excel 但随后收到错误消息:

There is a problem with the digital certificate. The VBA project could not be signed. The signature will be canceled

我无法解决这个问题。自签名证书工作得很好...

有什么想法吗?谢谢

代码签名证书需要包含证书路径中的所有证书。

尝试使用选项

导出certmgr中的原始证书(包括私钥!)
  • “如果可能,在证书路径中包含所有证书”

已启用,然后再次将其导入您的个人证书。


添加时间戳

如您在 link 中所示,可以在 Excel 中完成,方法是在签署文件之前设置以下注册表项:

reg add "HKCU\Software\Microsoft\VBA\Security" /v "TimeStampURL" /f /d "http://timestamp.sectigo.com"
reg add "HKCU\Software\Microsoft\VBA\Security" /v "TimeStampRetryCount" /f /t REG_DWORD /d 2
reg add "HKCU\Software\Microsoft\VBA\Security" /v "TimeStampRetryDelay" /f /t REG_DWORD /d 1

运行 windows 命令行中的命令。


检查时间戳

我知道手动检查时间戳的唯一解决方法是:

  1. 确保用于签署宏的证书不在计算机上的“可信发布者”存储中(检查用户存储和机器存储)。

  2. 在Excel的信任中心,将宏设置设置为“禁用所有宏并通知”。

  3. 重启Excel

  4. 打开签名文件。您应该会看到黄色警告面板,上面写着“宏已被禁用”。 不要点击它。

  5. 转到“文件”›“信息”,在该页面的顶部您应该看到“安全警告”块。单击“启用内容”›“高级选项”。

  6. 你会得到一个新的 window 说明签名有效,但发布者不受信任。单击“显示签名详细信息”link。

  7. 现在我们得到相同的 window,当您在 Windows 资源管理器中查看可执行文件的属性时,它会显示可执行文件的数字签名。在“会签”部分,我们看到了我们的时间戳。