在 Excel XLSM 文件中签署 VBA 代码 - 数字证书存在问题

got*_*ike 5 excel ssl vba code-signing ms-office

我有一个 DigiCert EV 代码签名证书来签署我的 C# 代码,而且效果很好。

但是,现在我尝试在 Excel XLSM 文件中签署 VBA 代码。

我收到错误“数字证书存在问题。无法对 VBA 项目进行签名。签名将被丢弃。”

DigiCert 支持似乎无法找到解决方案。

我尝试先保存 VBA 项目,然后保存文件,如此处所述... https://social.technet.microsoft.com/Forums/en-US/07f0158c-085b-4031-93a1-c9d047cf855c/unable- to-sign-outlook-2010-vbaproject?forum=outlook

我有 EV 代码签名证书,因此我无法导出具有此处讨论的证书路径的文件... https://knowledge.digicert.com/solution/SO1451.html 和此处... 无法使用有效的 VBA 进行签名Sectigo 代码签名证书

我想也许是因为我有 EV 证书,而我实际上可能需要 PFX 证书,但 DigiCert 说了以下内容......

到 11 月(或更早),标准代码签名也将不再可能。不可能的原因是标准要求“合格”硬件来存储私钥和代码签名证书,并且该硬件默认将其设置为“只读”或更具体地说,以便您可以使用它但可能无法导出。

所以我希望这里有人能回答这个问题。微软刚刚发布了一些 Office 更新,该更新将阻止 VBA,无需一堆额外步骤,除非代码已签名... https://learn.microsoft.com/en-us/deployoffice/security/internet-macros-blocked

非常感谢这里的任何帮助...

Yas*_*nov 6

此问题的根本原因是 SafeNet 身份验证客户端软件的默认行为发生了变化(从版本 10.5 开始)。默认情况下禁用一系列过时/已弃用的加密算法(包括 Office/Excel VBA 签名所需的算法)。有关更多详细信息,请参阅泰雷兹网站上的原始知识库文章感谢 DigiCert 支持提供此文章)。

我找到了两种解决方案:

  1. 卸载当前(v10.5 或更高版本)版本的 SafeNet 身份验证客户端。然后从此处下载并安装版本 10.4(或任何旧版本)。
  2. 正如 @vzczc 之前提到的,如果我们要使用 10.5+ 版本,那么我们需要手动导入/创建特定的注册表项和值。以下是我更详细的做法:
  • 我使用 SafeNet 身份验证客户端版本 10.8 R6,构建版本 10.8.2154.0 首先: SAC版本
  • 我做的第一件事是右键单击托盘中的“安全删除硬件并弹出媒体”图标,然后选择“弹出令牌 JC”。然后我从我的电脑上拔掉了 USB 令牌: 弹出令牌
  • 再次在 Windows 托盘中右键单击 SAC 图标并选择“退出”。
  • 打开 Windows 任务管理器(Ctrl + Shift + Esc键盘快捷键),转到“详细信息”选项卡。右键单击 -> 结束任务任何名称以“SAC...”开头的剩余进程(即使从托盘中退出 SAC 后,我仍然运行其中一个进程!): 任务管理器
  • 打开注册表编辑器(WinKey + R然后使用键盘快捷键regedit)。导航到该HKEY_LOCAL_MACHINE\SOFTWARE\SafeNet\Authentication\SAC密钥,右键单击“SAC”并选择“新建”->“密钥”。为新密钥命名Crypto 注册表新键
  • 现在右键单击Crypto我们刚刚创建的新键,然后选择“新建”->“字符串值”。命名新值Disable-Crypto regedit 新字符串值
  • 在右侧窗格中,双击Disable-Crypto我们刚刚创建的新值。在出现的对话框中,将“值数据”属性设置为None并单击“确定” regedit设置值
  • 如果一切顺利,您的最终注册表结构应如下所示: regedit最终结果
  • 现在重新启动您的电脑。
  • 重新启动后,等待所有程序(包括 SafeNet 身份验证客户端)再次加载。一旦您在托盘中看到 SAC 图标,请再次将硬件令牌插入 PC 的 USB 端口。
  • 您现在应该能够签署并保存 Excel VBA 项目。