我正在尝试使用我拥有的pfx文件对Windows 8 appx包进行签名。我使用了以下命令:
signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"
因此,我得到了以下信息:
SignTool错误:未找到符合所有给定标准的证书。
哪些“标准”我没有达到?这只是为了测试所以这些都是自签名证书。我已经尝试导入密钥然后进行签名,但总是出现相同的错误。我该如何解决这个问题?
我正在尝试使用我拥有的pfx文件对Windows 8 appx包进行签名。我使用了以下命令:
signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"
因此,我得到了以下信息:
SignTool错误:未找到符合所有给定标准的证书。
哪些“标准”我没有达到?这只是为了测试所以这些都是自签名证书。我已经尝试导入密钥然后进行签名,但总是出现相同的错误。我该如何解决这个问题?
我通过使用/sm
标志来指定查找机器存储而不是默认值-我的(本地用户)存储来解决了这个问题。另外,使用/debug
可以打开signtool的调试功能,这也可能会有所帮助。
我也曾遇到"After Private Key filter, 0 certs were left"的问题,花费了大量时间来弄清楚这个消息的含义。
问题在于我在Windows证书存储中错误地安装了证书,因此没有与代码签名证书关联的私钥。
我应该这样做:
使用Firefox或Internet Explorer提交请求给颁发机构。这将生成一个PRIVATE KEY,它会被浏览器静默地存储(Firefox中会出现一小段时间的对话框)。注意,其他浏览器可能不起作用:你的生命太短暂了,无法找出它们是否有效。
提交请求,通过颁发机构的验证步骤,牺牲一只山羊,向神祈祷,提交您曾祖父母的签名声明等。
下载证书(.crt)并将其导入到相同的浏览器中。现在,浏览器既有私钥又有证书。
将证书从浏览器导出为个人信息交换(.p12)文件。将要求您提供一个密码来保护此文件。
备份.p12文件副本。
运行证书管理器(certmgr.msc),右键单击个人证书存储,选择所有任务/导入...并将.p12文件导入到Windows中。将会要求您输入用于保护该文件的密码。此时,根据您的安全要求,您可以标记密钥为可导出,以便可以从Windows存储中恢复副本。您还可以标记在使用前需要密码,如果想打破批处理脚本。
成功运行signtool,并松了一口气,思考由于错误的错误消息和差劲或缺失的文档而浪费了多少生命。
我遇到了同样的问题,在阅读一些答案(发布在这里)后,我发现我的证书已经过期。
我从我的起始项目中创建了一个新的证书。然后在证书管理器中删除了过期的证书。
现在一切都可以正常编译。
signtool
拒绝在没有明确提供文件名和密码的情况下识别它。当作为构建过程的一部分并写在批处理文件或源文件中时,这可能不够安全。(导入原始的由CA签发的证书解决了这个问题。)我的问题最终是因为我不理解signtool选项。我提供了与我的证书不匹配的/n选项。当我删除它时,它停止抱怨。
我曾遇到过类似的问题,我的计算机名称已更改,证书已过期。通过创建一个新的测试证书,我成功解决了这个问题。
在Visual Studio中,右键单击解决方案资源管理器中的项目。选择属性。在属性窗口中选择签名。点击“创建测试证书...”。输入测试证书的密码信息,然后点击确定。
我也遇到了这个问题,尝试了很多方法。使用了SDK和Visual Studio签名,但是每次都提示“未找到符合所有给定条件的证书”。
解决方案: 请注意,如果使用选项signtool sign /debug...时出现“0 left”的“after private key filter”,原因是您的计算机没有将CA本身存储在存储中。要解决此问题,请先安装CA(在我的情况下是.crt文件),然后再运行签名。现在应该可以正常工作了!
Signtool只能与由同一台计算机请求和拥有的CA一起使用。
使用/debug参数时,当您收到此消息“经过私钥过滤器后,剩余0个证书。”时,可能的一个原因是pfx文件没有私钥。 在将安装的证书导出为pfx文件时,请确保启用复选框以包括私钥。
前往 项目属性
并在初始化编译之前取消选中所有来自 Firm
的字段
Signtool
正在尝试在受信任的根证书存储中查找证书,而您在那里没有代码签名证书。 - crea7or