SignTool出现内部错误(0x80100001)的解决方法咨询
问题描述
我刚把EV代码签名证书安装到Yubikey 5设备上,在VS2022的开发者命令提示符里执行了这条签名命令:
signtool sign /debug /sha1 <***> /fd SHA256 /t http://tsa.safecreative.org C:\temp\my_app.exe
结果遇到了以下错误输出:
The following certificate was selected:
Issued to: ***
Issued by: Sectigo Public Code Signing CA EV E36
Expires: Tue Sep 15 02:59:59 2026
SHA1 hash: <***>Done Adding Additional Store
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2146435071/0x80100001)
我的运行环境是Windows 10 22H2,Windows SDK版本10.0.22621,请问该如何解决这个问题?谢谢!
专家解答
针对你遇到的这个0x80100001内部错误,结合Yubikey EV证书的使用场景,给你几个实用的排查和解决步骤:
优先检查Yubikey的PIN输入与设备状态
这个错误很多时候是因为系统调用Yubikey时,PIN输入弹窗没被注意到或者输入超时/错误导致的。你可以先重新插拔Yubikey,确保设备被系统正常识别,然后再次执行签名命令,全程留意是否有PIN输入提示框(可能会被其他窗口遮挡),及时输入正确的PIN试试。调整SignTool命令参数
先去掉/debug参数,有时候调试输出可能干扰签名流程;更换时间戳服务器为证书颁发商官方的,比如Sectigo的http://timestamp.sectigo.com,第三方TSA服务器可能存在兼容性问题;另外可以添加/sm参数(指定使用机器证书存储),因为EV证书安装到Yubikey后,机器存储的访问权限更稳定,修改后的命令如下:signtool sign /sha1 <***> /fd SHA256 /sm /t http://timestamp.sectigo.com C:\temp\my_app.exe确认证书在Yubikey上的存储有效性
打开certmgr.msc(用户证书管理器),进入“个人”->“证书”目录,检查你的EV证书是否存在,并且证书的“位置”字段显示为Yubikey相关的硬件存储(比如“智能卡”)。如果找不到证书,需要重新将EV证书导入到Yubikey,导入时务必选择“硬件令牌/智能卡”作为存储位置,而不是本地磁盘。检查驱动与权限
确保Yubikey的驱动是最新版本,可以通过YubiKey Manager工具检查并更新;同时用管理员权限打开VS2022开发者命令提示符,签名操作需要足够权限访问硬件设备,普通权限可能会触发内部错误。尝试更换SignTool版本
虽然你使用的是较新的Windows SDK,但不同版本的SignTool对硬件令牌的兼容性略有差异。可以试试下载旧版本的Windows SDK(比如10.0.20348),使用其中的SignTool工具重新执行签名命令,看是否能解决问题。
备注:内容来源于stack exchange,提问作者Mihai Oltean

