Signtool错误:在Windows Store应用程序中找不到满足所有给定条件的证书?

393
我正在尝试使用我拥有的pfx文件对Windows 8 appx包进行签名。 我使用了以下命令:

我正在尝试使用我拥有的pfx文件对Windows 8 appx包进行签名。我使用了以下命令:

signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"

因此,我得到了以下信息:

SignTool错误:未找到符合所有给定标准的证书。

哪些“标准”我没有达到?这只是为了测试所以这些都是自签名证书。我已经尝试导入密钥然后进行签名,但总是出现相同的错误。我该如何解决这个问题?


我认为 Signtool 正在尝试在受信任的根证书存储中查找证书,而您在那里没有代码签名证书。 - crea7or
31
我曾经遇到过这个错误,原因是用于签名的证书已经过期了。 - Mark Homer
1
我曾经遇到过类似的问题,并在这里发布了一个答案。希望能对你有所帮助。 - SurenSaluka
22个回答

10

我通过使用/sm标志来指定查找机器存储而不是默认值-我的(本地用户)存储来解决了这个问题。另外,使用/debug可以打开signtool的调试功能,这也可能会有所帮助。


6

我也曾遇到"After Private Key filter, 0 certs were left"的问题,花费了大量时间来弄清楚这个消息的含义。

问题在于我在Windows证书存储中错误地安装了证书,因此没有与代码签名证书关联的私钥。

我应该这样做:

  1. 使用Firefox或Internet Explorer提交请求给颁发机构。这将生成一个PRIVATE KEY,它会被浏览器静默地存储(Firefox中会出现一小段时间的对话框)。注意,其他浏览器可能不起作用:你的生命太短暂了,无法找出它们是否有效。

  2. 提交请求,通过颁发机构的验证步骤,牺牲一只山羊,向神祈祷,提交您曾祖父母的签名声明等。

  3. 下载证书(.crt)并将其导入到相同的浏览器中。现在,浏览器既有私钥又有证书

  4. 将证书从浏览器导出为个人信息交换(.p12)文件。将要求您提供一个密码来保护此文件。

  5. 备份.p12文件副本。

  6. 运行证书管理器(certmgr.msc),右键单击个人证书存储,选择所有任务/导入...并将.p12文件导入到Windows中。将会要求您输入用于保护该文件的密码。此时,根据您的安全要求,您可以标记密钥为可导出,以便可以从Windows存储中恢复副本。您还可以标记在使用前需要密码,如果想打破批处理脚本。

  7. 成功运行signtool,并松了一口气,思考由于错误的错误消息和差劲或缺失的文档而浪费了多少生命。


6

我遇到了同样的问题,在阅读一些答案(发布在这里)后,我发现我的证书已经过期。

我从我的起始项目中创建了一个新的证书。然后在证书管理器中删除了过期的证书。

现在一切都可以正常编译。


5
标准包括账户名称(与其关联的私钥)、域、公司、过期日期、预期目的等等。
出现此错误可能有多种原因,已经列出了一些。这里有另一个提示:导入证书时,请务必使用从证书颁发机构(CA)获得的原始文件,否则某些属性可能会丢失。
例如:最近我尝试导入从同一台机器上的不同账户导出的证书。证书对我的账户可见,但未与我的账户关联,因此signtool拒绝在没有明确提供文件名和密码的情况下识别它。当作为构建过程的一部分并写在批处理文件或源文件中时,这可能不够安全。(导入原始的由CA签发的证书解决了这个问题。)

3

我的问题最终是因为我不理解signtool选项。我提供了与我的证书不匹配的/n选项。当我删除它时,它停止抱怨。


2

我曾遇到过类似的问题,我的计算机名称已更改,证书已过期。通过创建一个新的测试证书,我成功解决了这个问题。

在Visual Studio中,右键单击解决方案资源管理器中的项目。选择属性。在属性窗口中选择签名。点击“创建测试证书...”。输入测试证书的密码信息,然后点击确定。


2

我也遇到了这个问题,尝试了很多方法。使用了SDK和Visual Studio签名,但是每次都提示“未找到符合所有给定条件的证书”。

解决方案: 请注意,如果使用选项signtool sign /debug...时出现“0 left”的“after private key filter”,原因是您的计算机没有将CA本身存储在存储中。要解决此问题,请先安装CA(在我的情况下是.crt文件),然后再运行签名。现在应该可以正常工作了!

Signtool只能与由同一台计算机请求和拥有的CA一起使用。


我使用来自另一台计算机的CA与signtool没有任何问题。 - bparker

2

使用/debug参数时,当您收到此消息“经过私钥过滤器后,剩余0个证书。”时,可能的一个原因是pfx文件没有私钥。 在将安装的证书导出为pfx文件时,请确保启用复选框以包括私钥。


1

前往 项目属性 并在初始化编译之前取消选中所有来自 Firm 的字段


0
我使用的digicert令牌必须被识别为“Microsoft Usbccid-Smartcard-Leser(WUDF)”。

enter image description here

如果没有,我会收到这个错误消息“未找到符合所有给定条件的证书...”。这让我在SignTool选项和证书属性中搜索了很长时间,但毫无进展。所以我希望它能帮助到某些人 :-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接