EV代码签名证书签名MSI后Signtool验证提示‘未找到签名’问题
EV代码签名验证异常排查方案
1. 排查/a参数导致的证书选择问题
你用的/a参数会让SignTool自动挑选证书,但YubiKey上的EV证书容易和系统内其他证书冲突,导致实际签署的并非目标EV证书。
- 先执行命令列出YubiKey上的证书指纹:
signtool.exe sign /v /sm - 将签名命令中的
/a替换为/sha1 <你的证书指纹>,示例:signtool.exe sign /sha1 ABC123DEF456... /tr "http://timestamp.sectigo.com" /td sha256 /d "MySoft" /fd sha256 "mysoft.msi"
2. 确认MSI的签名覆盖范围
MSI存在外部签名和内部摘要签名两个区域,当前命令可能仅完成了外部签名,但/pa参数会验证符合Windows驱动要求的签名(需覆盖内部签名)。
- 先不带
/pa参数验证:signtool.exe verify /v mysoft.msi - 若需同时签署内部和外部区域,添加
/ms参数:signtool.exe sign /sha1 <指纹> /tr "http://timestamp.sectigo.com" /td sha256 /d "MySoft" /fd sha256 /ms mysoft.msi
3. 检查YubiKey证书的权限
EV证书在YubiKey上的容器可能未授予当前用户足够权限,导致签名未真正写入MSI文件。
- 打开
certmgr.msc,找到YubiKey上的EV证书,右键选择所有任务 > 管理私钥,确保当前用户拥有读取权限。 - 或通过YubiKey Manager工具,确认证书的签名权限处于启用状态。
4. 更换时间戳服务器地址
尝试将时间戳地址替换为HTTPS版本,部分环境下HTTP协议会出现兼容性问题:
/tr "https://timestamp.sectigo.com"
同时确认系统可正常访问该地址,未被防火墙或代理拦截。
5. 确保签名链完整
虽然验证时显示了签名链信息,但可能存在中间证书未正确安装、或YubiKey未携带完整证书链的情况:
- 导出YubiKey上的完整证书链(包含根证书与中间证书),安装到本地计算机的受信任根证书颁发机构和中级证书颁发机构存储区。
- 执行
signtool verify /v /kp mysoft.msi验证内核模式签名链,查看是否存在链断裂提示。
关于“未知发布者”的说明
Sectigo提到的SmartScreen问题是次要矛盾——当前SignTool已明确提示“无签名”,说明签名根本未生效,与SmartScreen无关。必须先解决验证错误,再处理发布者信任问题。
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

