使用DigiCert EV代码签名证书签署Excel XLSM文件VBA代码时遇错误
无法使用DigiCert EV代码签名证书签署Excel VBA项目的解决方案
问题描述
我持有一张DigiCert EV代码签名证书,用于签署C#代码完全正常,但尝试签署Excel XLSM文件中的VBA代码时,弹出错误提示:
There was a problem with the Digital Certificate. The VBA Project could not be signed. The signature will be discarded.
已尝试先保存VBA项目再保存文件的常规方案,无效;EV证书因硬件存储私钥为只读,无法导出带证书路径的文件,也无法获取PFX格式证书(DigiCert说明合格硬件存储的私钥默认只读,不可导出,未来标准代码签名也会如此)。同时微软近期更新后,未签名VBA代码会被拦截,急需解决办法。
可行解决方案
1. 修复Office证书识别权限
- 运行
certmgr.msc打开证书管理器,确认EV证书已安装在当前用户的「个人」证书存储中。若证书仅在硬件密钥容器内,可尝试将证书链(不含私钥)导入本地个人存储,部分Office版本对硬件存储的证书识别存在兼容性问题。 - 右键点击EV证书,选择「所有任务」>「管理私钥」,确保当前用户拥有「读取」权限,避免Office因权限不足调用私钥失败。
2. 使用signtool.exe直接签署文件
通过微软官方的签名工具绕过VBA内置签名功能,直接签署XLSM文件:
# 若能识别硬件密钥容器,使用此命令(先通过certutil -store My查看密钥容器名称) signtool sign /csp "你的加密服务提供商名称" /kc "密钥容器名称" /t "https://timestamp.digicert.com" "目标文件.xlsm"
注:加密服务提供商名称通常为Microsoft Smart Card Key Storage Provider(针对EV硬件密钥)。
3. 临时应急设置(不推荐长期使用)
若上述方案暂未生效,可临时调整Office宏信任规则:打开Excel>文件>选项>信任中心>信任中心设置>宏设置,选择「启用所有宏」,但此操作仅为临时应急,需尽快完成签名配置以保障安全。
4. 向DigiCert申请Office专属适配指导
明确告知DigiCert技术支持问题场景为Office VBA代码签名,要求提供针对硬件存储EV证书的适配配置步骤,部分CA会有针对特定应用的隐藏配置指南。
内容的提问来源于stack exchange,提问作者gotmike
相关产品推荐
相关产品推荐

