使用SignTool签名自解压EXE后出现未知发布者警告及PFX公钥不匹配问题
代码签名证书问题排查与解决
问题场景
自2015年以来第三次购买代码签名证书,转换为.pfx文件后用以下命令签名自解压安装程序,安装程序显示发布者未知(此前使用的证书无此问题):
copy /b 7zS.sfx + config.txt + CaptionPro.7z CaptionPro3.2.153.exe set FILEDESCR=/s desc "Caption Pro v 3.2.153" verpatch /va CaptionPro3.2.153.exe %FILEDESCR% "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\SignTool.exe" sign /f aleka_consulting_pty_ltd_2026.pfx /fd sha1 /p "XXXXXXX" CaptionPro3.2.153.exe
执行certutil -dump aleka_consulting_pty_ltd_2026.pfx时,报错Certified public key does NOT match stored keyset;运行SignTool签名命令时,报错:
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\SignTool.exe" sign /f aleka_consulting_pty_ltd_2026.pfx /fd sha1 /p "XXXXXX" CaptionPro3.2.153.exe Done Adding Additional Store SignTool Error: An error occurred while attempting to load the signing certificate from: C:\Installs Caption Pro\CaptionPro3.2.153.exe
核心结论
公钥不匹配错误是导致签名失败、发布者未知的直接原因。当.pfx文件中的证书公钥与对应私钥不匹配时,SignTool无法加载有效的签名凭证,程序未被正确签名,系统自然无法识别发布者信息。
解决步骤
1. 重新生成匹配的.pfx文件
- 联系证书颁发机构(CA),确认你获取的证书文件(通常为
.crt/.cer)和私钥文件(.key)是配对的。 - 使用OpenSSL重新生成正确的.pfx文件,确保证书与私钥对应:
执行时需设置PFX密码,后续签名命令要使用该密码。openssl pkcs12 -export -in your_certificate.crt -inkey your_private.key -out valid_cert.pfx
2. 验证新.pfx文件的有效性
运行以下命令检查文件是否正常:
certutil -dump valid_cert.pfx
若不再出现公钥不匹配的错误,说明文件有效。
3. 修正SignTool命令的路径与算法问题
- 注意目标文件路径包含空格,必须用引号包裹完整路径,避免解析错误;
- 建议将签名算法从
sha1改为sha256(SHA1已被标记为不安全,现代Windows系统兼容性差):"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\SignTool.exe" sign /f valid_cert.pfx /fd sha256 /p "你的PFX密码" "C:\Installs Caption Pro\CaptionPro3.2.153.exe"
4. 确认签名结果
签名完成后,执行以下命令验证签名是否成功:
signtool verify /pa CaptionPro3.2.153.exe
若输出"Successfully verified",则签名有效,程序的发布者信息会被系统正确识别。
内容的提问来源于stack exchange,提问作者SimonKravis
相关产品推荐
相关产品推荐

