Signtool错误:没有找到符合Windows Store应用程序所有给定条件的证书?

时间:2014-04-08 19:25:14

标签: windows-8 windows-store-apps signtool appx

所以,我试图用我的pfx文件签署Windows 8 appx包。我正在使用这样的命令:

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

从此,我得到:

  

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

什么"标准"我不见面吗?这仅用于测试,因此这些是自签名证书。我已尝试导入密钥然后对其进行签名,但它始终会导致相同的错误。我该如何解决?

18 个答案:

答案 0 :(得分:521)

通过Visual Studio获取此错误时,原因是签名证书设置与最初开发的计算机相匹配。

您可以转到项目属性>进行检查。签名选项卡并检查证书详细信息。

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

Signing Properties

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

答案 1 :(得分:88)

尝试使用/ 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版本没有。

答案 2 :(得分:30)

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

答案 3 :(得分:15)

从项目属性中的签名标签中取消选中“在列表中签署一次单击”,它将删除错误,您可以从那里创建一个新错误。

答案 4 :(得分:14)

得到同样的问题,结果证明证书的私钥没有权限。
要修复 - 打开证书管理,找到您的证书,右键单击 - &gt;管理私钥然后在安全状态下确保您的用户已添加并获得权限,并为我修复了该权限。

答案 5 :(得分:13)

如果有其他人遇到此问题:我的问题最终是我需要在使用signtool.exe应用程序之前以管理员身份运行命令提示符。然后一切都很美妙。

答案 6 :(得分:13)

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

答案 7 :(得分:9)

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

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

还有this女士的文章建议,

  

如果您使用的是Visual Studio 2008,并且针对.NET 3.5并使用自动更新,则只需更改证书并部署新版本,即可。

答案 8 :(得分:7)

我遇到了这个问题而且我不完全确定下面的哪个步骤使它成功,但希望这有助于其他人......这就是我所做的:

  • 将下载的证书(.crt)安装到证书中(我将其放入“个人”商店) - 右键单击​​.crt文件,然后单击安装证书
  • 运行certmgr.msc导出证书(在第一步中使用的任何商店中找到)作为包含私钥和扩展属性的pfx文件(可能不必要)
  • 在签署项目时使用导出的.pfx文件
  • 示例signtool:signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    密码与导出
  • 期间提供的密码相同

答案 9 :(得分:6)

我通过使用/sm标志来指定查看机器商店而不是默认的My(本地用户)商店来解决这个问题。此外,使用/debug可以帮助打开signtool的调试。

答案 10 :(得分:5)

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

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

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

答案 11 :(得分:3)

我在控制台应用程序开发中遇到了同样的问题,并且作为quick workaround

然后转到project properties

点击signing标签,然后取消选中“签署ClickOnce清单”。

图片描述:

enter image description here

enter image description here

仅供参考,您还可以看到this less one minute video solution。上面的照片是从视频中拍摄的。

答案 12 :(得分:2)

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

答案 13 :(得分:2)

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

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

答案 14 :(得分:2)

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

答案 15 :(得分:2)

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

解决方案: 请注意,如果“私钥过滤后”:'0 left'显示选项signtool sign / debug ...,原因是您的PC在商店中没有CA本身。要解决此问题,请首先安装CA(在我的示例中为.crt文件),然后再次运行该符号。它现在应该可以工作了!

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

答案 16 :(得分:1)

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

答案 17 :(得分:0)

我有相同的“ 在私钥过滤器之后,遗留了0个证书”的消息,并花费了我一生的时间来弄清楚消息的含义。

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

我应该做的是这样:

  1. 使用Firefox或Internet Explorer,提交 向发行人的要求。这将生成一个“私钥”,该私钥由浏览器以静默方式存储(在Firefox中,对话框会出现几分之一秒)。请注意,其他浏览器可能无法正常工作:您的寿命太短,无法确定是否可以。

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

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

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

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

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

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