【问题标题】:Unable to sign VBA with valid Sectigo Code Signing certificate无法使用有效的 Sectigo 代码签名证书对 VBA 进行签名
【发布时间】:2022-01-13 07:46:48
【问题描述】:

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

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

数字证书有问题。 VBA 项目可以 不签字。签名将被取消

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

有什么想法吗?谢谢

【问题讨论】:

  • 代码签名证书需要包含证书路径中的所有证书。尝试导出certmgr 中的原始证书(包括私钥!)并启用选项“如果可能,在证书路径中包括所有证书”,然后将其再次导入您的个人证书。
  • @Pᴇʜ emh.. 奇迹发生了。它有效..谢谢。是否还有一个选项可以使用有效时间戳(如常规 .exe 文件)对其进行签名?
  • @Pᴇʜ 更准确地说,如何验证 VBA 是否有时间戳?我关注了:codesigningstore.com/…,但我不知道在哪里检查时间戳。
  • 在下面查看我的答案

标签: excel vba certificate


【解决方案1】:

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

尝试使用选项导出certmgr中的原始证书(包括私钥!)

  • “如果可能,在证书路径中包含所有证书”

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


添加时间戳

正如您在链接中所展示的,可以在 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. 您将看到一个新窗口,显示签名有效,但发布者不受信任。点击“显示签名详情”链接。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-25
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2013-04-21
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多