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

问题描述 投票:247回答:18

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

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

从此,我得到:

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

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

windows-8 windows-store-apps signtool appx
18个回答
546
投票

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

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

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

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


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) 密码与导出期间提供的密码相同

6
投票

我有同样的问题,阅读一些答案(在这里发布),我看到我的证书已过期。

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

现在一切都很好。


5
投票

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

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

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


2
投票

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

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

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


2
投票

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


2
投票

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

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


2
投票

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


1
投票

在启动编译之前,转到project properties并取消选中Firm中的所有字段


0
投票

我有相同的“After Private Key过滤器,剩下0个证书”的消息,并且花费了太多的时间来试图找出消息的含义。

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

我应该做的是这样的:

  1. 使用Firefox或Internet Explorer,将请求提交给颁发者。这将生成一个私钥,由浏览器静默存储(Firefox中会出现一段时间的对话框)。请注意,其他浏览器可能无法正常工作:您的生命太短暂,无法确定是否存在。
  2. 提交请求,跳过发行人的验证圈和循环,牺牲山羊,向众神祈祷,提交你的曾祖父母签署的声明等。
  3. 下载证书(.crt)并将其导入同一浏览器。浏览器现在具有私钥和证书。
  4. 将证书从浏览器导出为个人信息交换(.p12)文件。系统将要求您提供密码以保护此文件。
  5. 保留.p12文件的备份副本。
  6. 运行证书管理器(certmgr.msc),右键单击个人证书存储,选择所有任务/导入...并将.p12文件导入Windows。系统将要求您提供用于保护文件的密码。此时,根据您的安全要求,您可以将密钥标记为可导出,以便可以从Windows应用商店还原副本。如果要中断批处理脚本,还可以在使用前标记需要密码。
  7. 成功地运行signtool,松了一口气,并思考由于错误的错误消息和糟糕或缺少的文档而浪费了多少生命。

91
投票

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


31
投票

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


16
投票

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


15
投票

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


15
投票

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

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

另外正如this MS文章所示,

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


14
投票

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


14
投票

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


8
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.