签名工具错误:在Windows商店应用程序中没有发现符合所有给定标准的证书?

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

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

由此,我得到:

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

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

431970 次浏览

尝试使用/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.

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

我改变了哈希值和其他信息,但你应该明白。希望这能有所帮助。


< p > 1 请注意:__ABC0是关于__ABC1选项放置的特定位置。它需要在sign语句之后 < br > 2 > < /晚餐还要注意:__ABC0选项只适用于某些版本的signtool。WDK版本有这个选项,而Windows SDK版本没有

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

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

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

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

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

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

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

签名属性

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

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

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

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

请始终先检查您的证书有效期,因为大多数证书都有有效期。在我的情况下,证书已经过期,我正在试图建立项目。

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

< p >解决方案: 注意,如果"after private key filter": '0 left'显示选项signtool sign /debug…,原因是你的PC没有CA本身在商店。要解决这个问题,首先安装CA(在我的例子中是一个.crt文件),然后再次运行符号。它现在应该可以工作了!< / p >

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

我也有同样的问题,读了一些答案(贴在这里),我看到我的证书过期了。

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

现在一切都编译好了。

我的问题是我不理解signtool选项。我为/n选项提供了与我的证书不匹配的东西。当我把它拿掉时,它就不再抱怨了。

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

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

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

使用/debug,当你得到这个消息“After Private Key filter, 0 certs were left.”,一个原因可能是pfx文件没有私钥。 当您将已安装的证书导出到pfx文件时,请确保启用复选框也包括私钥

只要取消项目属性中签名选项卡中的“Sign the click once manifest”,它就会删除错误,你可以从那里创建一个新的。

我有这个问题,我不完全确定下面的哪一步使它工作,但希望这有助于其他人…这就是我所做的:

  • 安装下载的证书(.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)
    其中密码与Export

如果你不需要签署应用程序,右键单击你的项目

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

正如 MS文章所建议的那样,

如果你使用的是Visual Studio 2008,目标是。net 3.5并使用自动更新,你只需更改证书并部署一个新版本,

我收到了同样的“私钥过滤后,剩下0个certs”信息,我花了太多的时间试图弄清楚这条信息的意思。

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

我应该做的是:

  1. 使用Firefox或ie浏览器提交 向发行者请求。这将生成一个PRIVATE KEY,由浏览器静默存储(在Firefox中只会出现一个对话框)。请注意,其他浏览器可能无法工作:你的生命太短暂,无法了解它们是否可以工作

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

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

  4. 将证书从浏览器导出为Personal Information Exchange (.p12)文件。您将被要求提供密码来保护该文件。

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

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

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

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

project properties然后,

点击signing选项卡,取消选中“Sign the ClickOnce Manifest”。

图片描述:

enter image description here

enter image description here

供参考,你也可以看到这个少于一分钟的视频解决方案。上面的图片是从视频中截取的。

我使用的数字令牌,必须被识别为“Microsoft usbcid -智能卡- leser (WUDF)”。

enter image description here

如果不是,我得到这个错误消息'没有找到符合所有给定标准的证书…'。 这让我毫不费力地在SignTool选项和证书属性中搜索了很长时间。所以我希望它能帮助到一些人:-)

我在使用Git Bash时得到这个错误。 使用PowerShell成功。