修改shell32.dll后signtool重签名提示无符合条件证书如何解决?
报错原因
SignTool Error: No certificates were found that met all the given criteria.
出现这个错误的核心原因是signtool sign /a会自动扫描当前系统证书存储中符合代码签名要求、持有对应私钥、未过期的有效证书,你的本地设备中不存在符合条件的证书,因此无法完成签名。另外shell32.dll是微软官方发布的系统核心文件,你无法获取到微软的官方签名证书,只能通过自签名证书完成签名操作,后续需要将自签名证书加入系统受信任根证书列表,避免系统校验签名不通过。
解决步骤
第一步:生成自签名代码签名证书
用管理员权限打开PowerShell,执行以下命令生成有效期10年的代码签名证书:New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Local System Code Sign" -CertStoreLocation "Cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(10)第二步:将证书加入系统受信任根证书存储
- 按下Win+R组合键,输入
certmgr.msc回车打开证书管理器 - 依次展开「当前用户」→「个人」→「证书」,找到刚才生成的名为「Local System Code Sign」的证书
- 右键复制该证书,再依次展开「受信任的根证书颁发机构」→「证书」,右键空白处选择粘贴
- 按下Win+R组合键,输入
第三步:重新执行签名操作
如果用自动搜索证书的方式还是报错,可以手动指定证书指纹签名:- 双击刚才生成的证书,切换到「详细信息」标签页,找到「指纹」字段,复制所有十六进制字符并去掉中间的空格
- 执行签名命令:
signtool sign /sha1 [你复制的证书指纹] [path]/shell32.dll
额外注意事项
- 所有操作都需要使用管理员权限执行,否则证书操作、系统目录文件修改都会触发权限报错
- 替换修改后的shell32.dll前请务必做好系统备份,或者提前创建系统还原点,避免修改失败导致系统无法启动
- 64位系统需要同时处理System32和SysWOW64目录下的两个shell32.dll文件,避免32位程序调用时出现签名校验失败的问题
内容的提问来源于stack exchange,提问作者IIROG30II
相关产品推荐
相关产品推荐

