Signtool 错误:没有找到符合 Windows 应用商店应用程序所有给定条件的证书?
Posted
技术标签:
【中文标题】Signtool 错误:没有找到符合 Windows 应用商店应用程序所有给定条件的证书?【英文标题】:Signtool error: No certificates were found that met all given criteria with a Windows Store App? 【发布时间】:2014-04-08 19:25:14 【问题描述】:我正在尝试使用我拥有的 pfx 文件对 Windows 8 appx 包进行签名。我正在使用这样的命令:
signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"
由此,我得到:
SignTool 错误:未找到符合所有给定条件的证书。
我没有满足哪些“标准”?这仅用于测试,因此这些是自签名证书。我尝试导入密钥然后对其进行签名,但它总是会导致相同的错误。我该如何解决?
【问题讨论】:
我认为Signtool
正在尝试在受信任的根证书存储中查找证书,而您那里没有代码签名证书。
我有这个错误是因为用于签名的证书已过期
我遇到了类似的问题,并在此处发布了answer。希望这会有所帮助。
【参考方案1】:
当通过 Visual Studio 收到此错误时,这是因为有一个签名证书设置与最初开发它的计算机相匹配。
您可以通过转到项目属性 > 签名选项卡并检查证书详细信息来检查这一点。
您可以取消选中“签署 ClickOnce 清单”以禁用签名。
如果您不想关闭此选项,则必须安装证书。
【讨论】:
只是为了补充@JDandChips 的建议:出于调试和测试目的,您还可以通过单击上面屏幕截图中显示的“创建测试证书”按钮来使用临时测试证书。 “安装证书”是什么意思? 在我的情况下,证书可以从最初开发它的机器上获得,所以我可以选择“从文件中选择...”来安装丢失的证书。或者,您可以随时创建一个新的并使用它! @JDandChips 如何创建新证书? 对于 VS 新手。确保您右键单击项目,而不是解决方案,因为这会弹出一个完全不同的菜单!【参考方案2】:试试 /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 版本没有。
【讨论】:
为我工作。并不是说我了解signtool 的响应,而是/debug 做了它应该做的。点赞! 这个命令是特定于你放置/debug的地方,如果你把它放乱了,它会报错。 /debug 仅适用于特定版本的 signtool.exe。 WDK 自带的那个提供了这个选项,Windows SDK 的那个没有。 另外,/debug 必须在 signtool 符号之后,而不是在两者之间。 显示我的证书已过期。干得好。【参考方案3】:我在控制台应用程序开发和quick workaround中遇到了同样的问题,
然后去project properties
,
单击signing
选项卡并取消选中“签署 ClickOnce 清单”。
图片说明:
仅供参考,您还可以查看this less one minute video solution。以上图片取自视频。
【讨论】:
您也可以点击创建测试证书进行。谢谢 取消选中此框意味着当第三方尝试通过网络安装您的软件时,Windows 安全中心将阻止该应用程序运行。您需要正确的代码签名证书,并且必须使用它签署 ClickOne 清单。 @ChrisBordeman 感谢您的信息!我刚刚分享了一个快速的解决方案,这样开发就不会停止:) 无论如何,安全功能应该需要像你提到的那样正确修复。 请注意,如果应用程序在出现错误之前已经使用证书部署,然后您取消选中此选项,对于最终用户来说,这就像安装新应用程序一样。这也意味着他们将无法自动更新。只要您不部署,这可能是一个快速的解决方法,但您必须在重新部署之前解决此问题。【参考方案4】:请务必先检查您的证书到期日期,因为大多数证书都有到期日期。在我的情况下,证书已过期,我正在尝试构建项目。
【讨论】:
要检查证书到期情况,请转到命令行,导航到证书所在的位置,然后输入certutil -dump mycertificate.pfx
。查看最后一个条目,因为第一个条目是 CA,而不是您的代码签名证书。【参考方案5】:
如果您不必为应用程序签名,请右键单击您的项目
Project Properties -> Signing -> uncheck "Sign the ClickOnce Manifest"
正如this MS 文章建议的那样,
如果您使用 Visual Studio 2008 并且目标是 .NET 3.5 并使用自动更新,则只需更改证书并部署新版本,
【讨论】:
您也可以点击创建测试证书进行。谢谢【参考方案6】:在我的情况下,我尝试关联的证书类型错误。我有“服务器身份验证”,而不是“代码签名”。 您应该能够在“预期用途”部分的证书快照中看到这一点。 之后,它就可以正常工作了。
【讨论】:
是的,就是我为了这个答案苦苦挣扎了2天。 您在哪里更改此选项?【参考方案7】:只需从项目属性的签名选项卡中取消选中“签署单击清单”,它就会删除错误,您可以从那里创建一个新的。
【讨论】:
【参考方案8】:万一其他人遇到这种情况:我的问题最终是我需要在使用 signtool.exe 应用程序之前以管理员身份运行命令提示符。然后一切都很好。
【讨论】:
对我没有帮助。 我正在将 VS2015 中的 signtool 作为脚本运行,我遇到了同样的问题。我以管理员身份运行 VS2015,signtool 能够签署我的文件>【参考方案9】:遇到同样的问题,原来证书的私钥没有权限。 要修复 - 打开证书管理,找到您的证书,右键单击 -> 管理私钥,然后在顶部的安全性中确保您的用户已添加并授予权限,这为我修复了它。
【讨论】:
【参考方案10】:我遇到了这个问题,我不完全确定下面的哪个步骤使它起作用,但希望这对其他人有帮助......这就是我所做的:
将下载的证书 (.crt) 安装到证书中(我将其放入“个人”存储) - 右键单击 .crt 文件并单击安装证书。 运行certmgr.msc
并导出证书(在您在第一步中使用的任何存储中找到)作为 pfx 文件,包括私钥和扩展属性
签署项目时使用导出的 .pfx 文件
符号工具示例:signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
其中密码与导出期间提供的密码相同
【讨论】:
谢谢,这成功了。我使用的是 Comodo 提供的.crt
文件,而不是安装证书,然后导出 .pfx
文件。
非常感谢!
我打赌这会为我解决问题,但是当我尝试导出时,.PFX 选项是灰色的。我可能必须申请启用导出私钥选项的新证书?【参考方案11】:
我通过使用/sm
标志来指定在机器存储中查找而不是默认值(即我的(本地用户)存储)来解决此问题。此外,使用/debug
可以帮助打开signtool 的调试。
【讨论】:
【参考方案12】:我遇到了同样的问题,阅读了一些答案(在此处发布),我看到我的证书已过期。
只需从我的开始项目中创建一个新项目。然后在证书管理器处删除了过期的证书。
现在一切都编译好了。
【讨论】:
【参考方案13】:条件包括帐户名称(与其关联的私钥)、域、公司、到期日期、预期用途等。
发生此错误的可能原因有很多,其中一些已经列出。这里还有一个提示:导入证书时,请确保使用从证书颁发机构 (CA) 收到的原始文件,否则某些属性可能会丢失。
示例:最近我尝试在同一台机器上导入从不同帐户导出的证书。该证书对我的帐户可见,但未与我的帐户关联,因此signtool
在没有明确提供文件名和密码的情况下拒绝识别它。当作为构建过程的一部分完成并在批处理文件或源文件中明确写出时,可能不够安全。 (导入原 CA 颁发的证书即可解决。)
【讨论】:
【参考方案14】:我收到了相同的“经过私钥过滤后,剩下 0 个证书”消息,并且我花了太多时间试图弄清楚消息的含义。
问题是我在 Windows 证书存储中错误地安装了证书,因此没有与代码签名证书关联的私钥。
我应该做的是:
使用 Firefox 或 Internet Explorer,提交 向发行人提出要求。这会生成一个由浏览器静默存储的 PRIVATE KEY(在 Firefox 中会出现一个对话框,持续不到一秒)。请注意,其他浏览器可能无法正常工作:您的生命太短暂,无法确定它们是否可以工作。
提交请求,跳过发行人的验证循环,祭祀山羊,向众神祈祷,提交曾祖父母的签名声明等。
下载证书 (.crt) 并将其导入同一浏览器。 浏览器现在拥有私钥和证书。
将证书从浏览器导出为个人信息交换 (.p12) 文件。系统将要求您提供密码以保护此文件。
保留 .p12 文件的备份副本。
运行证书管理器 (certmgr.msc),右键单击 个人 证书存储,选择 所有任务/导入... 并导入 . p12 文件导入 Windows。系统将要求您输入用于保护文件的密码。此时,根据您的安全要求,您可以将密钥标记为可导出,以便您可以从 Windows 应用商店恢复副本。如果要破坏批处理脚本,还可以在使用前标记需要密码。
成功运行 signtool,松了一口气,想想你有多少生命因为错误的错误信息和糟糕或缺失的文档而浪费了。
【讨论】:
【参考方案15】:我的问题最终是我不了解 signtool 选项。我提供的 /n 选项与我的证书不匹配。当我删除它时,它就不再抱怨了。
【讨论】:
【参考方案16】:我也遇到过这个问题,试了很多次。使用了 SDK 和 Visual Studio 签名,但到处都是“找不到符合所有给定条件的证书”。
解决方案: 请注意,如果 "after private key filter": '0 left' 出现选项 signtool sign /debug...,则原因是您的 PC 在商店中没有 CA 本身。要解决此问题,请先安装 CA(在我的情况下为 .crt 文件),然后再次运行该标志。它现在应该可以工作了!
Signtool 只能与同一台 PC 请求和拥有的 CA 一起使用。
【讨论】:
我在使用来自另一台 PC 的 CA 的 signtool 时没有问题。【参考方案17】:我遇到了类似的问题,我的计算机名称已更改并且证书已过期。我能够通过创建一个新的测试证书来解决这个问题。
在 Visual Studio 中,右键单击解决方案资源管理器中的项目。选择属性。选择登录属性窗口。单击“创建测试证书....”。输入测试证书的密码信息,然后单击确定。
【讨论】:
【参考方案18】:使用 /debug 时,当您收到此消息“经过私钥过滤后,剩下 0 个证书。”时,一个原因可能是 pfx 文件没有私钥。 当您将安装的证书导出到 pfx 文件时,请确保启用该复选框以包含私钥。
【讨论】:
【参考方案19】:在启动编译之前转到project properties
并取消选中Firm
中的所有字段
【讨论】:
【参考方案20】:我使用的digicert Token,必须识别为“Microsoft Usbccid-Smartcard-Leser(WUDF)”。
如果不是,我会收到此错误消息“未找到符合所有给定条件的证书...”。 这让我毫不费力地在 SignTool 选项和证书属性中搜索了很长时间。所以我希望它可以帮助某人:-)
【讨论】:
以上是关于Signtool 错误:没有找到符合 Windows 应用商店应用程序所有给定条件的证书?的主要内容,如果未能解决你的问题,请参考以下文章
SignTool 错误:未找到符合所有给定条件的证书。 VS2019
SignTool 错误:发生了意外的内部错误。错误 MSB3482