352

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

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

由此,我得到:

SignTool 错误:未找到满足所有给定条件的证书。

我没有达到什么“标准”?这仅用于测试,因此这些是自签名证书。我尝试导入密钥然后对其进行签名,但它总是会导致相同的错误。我该如何解决?

4

20 回答 20

671

通过 Visual Studio 收到此错误时,这是​​因为有一个签名证书设置与最初开发它的计算机相匹配。

您可以通过转到项目属性 > 签名选项卡并检查证书详细信息来检查这一点。

您可以取消选中“签署 ClickOnce 清单”以禁用签名。

签名属性

如果您不想关闭此选项,则必须安装证书。

于 2014-12-16T14:55:02.227 回答
140

尝试使用 /debug。1,2如:

signtool sign /debug /f mypfxfile.pfx /p <password> (mydllexectuable).exe

它将帮助您了解正在发生的事情。你应该得到这样的输出:

The following certificates were considered:
    Issued to: <issuer>
    Issued by: <certificate authority> Class 2 Primary Intermediate Server CA
    Expires:   Sun Mar 01 14:18:23 2015
    SHA1 hash: DD0000000000000000000000000000000000D93E

    Issued to: <certificate authority> Certification Authority
    Issued by: <certificate authority> Certification Authority
    Expires:   Wed Sep 17 12:46:36 2036
    SHA1 hash: 3E0000000000000000000000000000000000000F

After EKU filter, 2 certs were left.
After expiry filter, 2 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.

您可以查看导致您的证书无法工作的过滤器,或者是否没有考虑任何证书。

我更改了哈希值和其他信息,但你应该明白了。希望这可以帮助。


1 请注意:signtool特别关注/debug选项的放置位置。它需要在sign声明之后。
2 另请注意:该/debug选项仅适用于某些版本的signtool. WDK 版本有这个选项,而 Windows SDK 版本没有。

于 2014-04-14T04:26:48.527 回答
49

我在控制台应用程序开发中遇到了同样的问题,作为一种快速解决方法

project properties那时,

单击signing选项卡并取消选中“签署 ClickOnce 清单”。

图片说明:

在此处输入图像描述

在此处输入图像描述

仅供参考,您还可以看到这个不到一分钟的视频解决方案。上图取自视频。

于 2019-11-12T04:49:44.913 回答
42

请始终首先检查您的证书到期日期,因为大多数证书都有到期日期。在我的情况下,证书已过期,我正在尝试构建项目。

于 2015-10-19T10:28:54.767 回答
28

如果您不必为应用程序签名,请右键单击您的项目

Project Properties -> Signing -> uncheck "Sign the ClickOnce Manifest"

同样正如这篇MS 文章所建议的,

如果您使用的是 Visual Studio 2008 并且以 .NET 3.5 为目标并使用自动更新,则只需更改证书并部署新版本,

于 2019-01-17T03:07:38.063 回答
16

就我而言,我尝试关联的证书类型错误。
我有“服务器身份验证”而不是“代码签名”
您应该能够在“预期用途”部分的证书快照中看到这一点。
之后,它就可以正常工作了。

于 2014-10-22T15:51:53.517 回答
16

只需从项目属性的签名选项卡中取消选中“签署单击清单”,它将删除错误,您可以从那里创建一个新错误。

于 2018-01-21T05:43:56.520 回答
15

万一其他人遇到这种情况:我的问题最终是我需要在使用 signtool.exe 应用程序之前以管理员身份运行命令提示符。然后一切都很好。

于 2014-08-20T14:15:51.497 回答
15

遇到同样的问题,原来证书的私钥没有权限。
要修复 - 打开证书管理,找到您的证书,右键单击 -> 管理私钥,然后在顶部的安全性中确保添加了您的用户并授予权限,这为我修复了它。

于 2014-11-21T16:12:08.000 回答
10

我遇到了这个问题,我不完全确定下面的哪个步骤使它起作用,但希望这对其他人有帮助......这就是我所做的:

  • 将下载的证书 (.crt) 安装到证书中(我将其放入“个人”存储) - 右键单击​​ .crt 文件,然后单击Install Certificate
  • 将证书(在您在第一步中使用的任何存储中找到)运行certmgr.msc导出为 pfx 文件,包括私钥和扩展属性
  • 签署项目时使用导出的 .pfx 文件
  • 示例 signtool:signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    密码与导出期间提供的密码相同
于 2018-02-15T14:54:09.417 回答
10

我通过使用/sm标志指定查看机器存储而不是默认值(即我的(本地用户)存储)解决了这个问题。此外,它可以帮助使用/debug.

于 2017-05-23T19:20:22.620 回答
6

我遇到了同样的问题,阅读了一些答案(在此处发布),我看到我的证书已过期。

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

现在一切都编译好了。

于 2016-08-15T22:16:09.590 回答
5

标准包括帐户名称(与其关联的私钥)、域、公司、到期日期、预期目的等。

发生此错误的原因有很多,其中一些已经列出。这是另一个提示:导入证书时,请确保使用从证书颁发机构 (CA) 收到的原始文件,否则某些属性可能会丢失。

示例:最近我尝试导入从同一台机器上的不同帐户导出的证书。该证书对我的帐户可见,但与我的帐户没有关联,因此signtool在没有明确提供文件名和密码的情况下拒绝识别它。当作为构建过程的一部分完成并在批处理文件或源文件中明确写入时,可能不够安全。(导入原始 CA 颁发的证书解决了它。)

于 2015-02-05T21:34:23.257 回答
4

我有相同的“在私钥过滤器之后,留下 0 个证书”消息并且我花了太多时间试图弄清楚消息的含义。

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

我应该做的是:

  1. 使用 Firefox 或 Internet Explorer,将请求提交给颁发者。这会生成一个由浏览器静默存储的 PRIVATE KEY(在 Firefox 中会出现一个对话框,持续不到一秒)。请注意,其他浏览器可能无法运行:您的生命太短了,无法确定它们是否可以运行。

  2. 提交请求,跳过发行人的验证循环,牺牲一只山羊,向众神祈祷,提交曾祖父母的签名声明等。

  3. 下载证书 (.crt) 并将其导入同一浏览器浏览器现在同时拥有私钥和证书

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

  5. 保留 .p12 文件的备份副本。

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

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

于 2019-02-12T21:54:13.663 回答
3

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

于 2016-10-31T06:26:20.907 回答
2

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

于 2017-07-04T10:14:08.390 回答
2

我也遇到过这个问题,试过很多。使用了 SDK 和 Visual Studio 签名,但我到处都得到“没有找到符合所有给定条件的证书”。

解决方案:请注意,如果 "after private key filter": '0 left' 显示带有选项 signtool sign /debug...,则原因是您的 PC 在商店中没有 CA 本身。要解决此问题,请先安装 CA(在我的情况下为 .crt 文件),然后再次运行该标志。它现在应该可以工作了!

Signtool 只能与同一台 PC 请求和拥有的 CA 一起使用。

于 2016-06-15T08:51:06.290 回答
2

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

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

于 2017-04-26T13:59:43.543 回答
1

转到并取消选中初始化编译之前的project properties所有字段Firm

于 2014-11-19T15:29:00.930 回答
0

我使用的 digicert Token,必须识别为“Microsoft Usbccid-Smartcard-Leser(WUDF)”。

在此处输入图像描述

如果不是,我会收到此错误消息“未找到符合所有给定条件的证书...”。这让我毫不费力地在 SignTool 选项和证书属性中搜索了很长时间。所以我希望它可以帮助某人:-)

于 2022-02-23T16:11:23.920 回答