我正在尝试使用我拥有的 pfx 文件对 Windows 8 appx 包进行签名。我正在使用这样的命令:
signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"
由此,我得到:
SignTool 错误:未找到满足所有给定条件的证书。
我没有达到什么“标准”?这仅用于测试,因此这些是自签名证书。我尝试导入密钥然后对其进行签名,但它总是会导致相同的错误。我该如何解决?
我正在尝试使用我拥有的 pfx 文件对 Windows 8 appx 包进行签名。我正在使用这样的命令:
signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"
由此,我得到:
SignTool 错误:未找到满足所有给定条件的证书。
我没有达到什么“标准”?这仅用于测试,因此这些是自签名证书。我尝试导入密钥然后对其进行签名,但它总是会导致相同的错误。我该如何解决?
通过 Visual Studio 收到此错误时,这是因为有一个签名证书设置与最初开发它的计算机相匹配。
您可以通过转到项目属性 > 签名选项卡并检查证书详细信息来检查这一点。
您可以取消选中“签署 ClickOnce 清单”以禁用签名。
如果您不想关闭此选项,则必须安装证书。
尝试使用 /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 版本没有。
我在控制台应用程序开发中遇到了同样的问题,作为一种快速解决方法,
到project properties
那时,
单击signing
选项卡并取消选中“签署 ClickOnce 清单”。
图片说明:
仅供参考,您还可以看到这个不到一分钟的视频解决方案。上图取自视频。
请始终首先检查您的证书到期日期,因为大多数证书都有到期日期。在我的情况下,证书已过期,我正在尝试构建项目。
如果您不必为应用程序签名,请右键单击您的项目
Project Properties -> Signing -> uncheck "Sign the ClickOnce Manifest"
同样正如这篇MS 文章所建议的,
如果您使用的是 Visual Studio 2008 并且以 .NET 3.5 为目标并使用自动更新,则只需更改证书并部署新版本,
就我而言,我尝试关联的证书类型错误。
我有“服务器身份验证”而不是“代码签名”。
您应该能够在“预期用途”部分的证书快照中看到这一点。
之后,它就可以正常工作了。
只需从项目属性的签名选项卡中取消选中“签署单击清单”,它将删除错误,您可以从那里创建一个新错误。
万一其他人遇到这种情况:我的问题最终是我需要在使用 signtool.exe 应用程序之前以管理员身份运行命令提示符。然后一切都很好。
遇到同样的问题,原来证书的私钥没有权限。
要修复 - 打开证书管理,找到您的证书,右键单击 -> 管理私钥,然后在顶部的安全性中确保添加了您的用户并授予权限,这为我修复了它。
我遇到了这个问题,我不完全确定下面的哪个步骤使它起作用,但希望这对其他人有帮助......这就是我所做的:
certmgr.msc
并导出为 pfx 文件,包括私钥和扩展属性signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
我通过使用/sm
标志指定查看机器存储而不是默认值(即我的(本地用户)存储)解决了这个问题。此外,它可以帮助使用/debug
.
我遇到了同样的问题,阅读了一些答案(在此处发布),我看到我的证书已过期。
只需从我的开始项目创建一个新项目。然后在证书管理器中删除了过期的证书。
现在一切都编译好了。
标准包括帐户名称(与其关联的私钥)、域、公司、到期日期、预期目的等。
发生此错误的原因有很多,其中一些已经列出。这是另一个提示:导入证书时,请确保使用从证书颁发机构 (CA) 收到的原始文件,否则某些属性可能会丢失。
示例:最近我尝试导入从同一台机器上的不同帐户导出的证书。该证书对我的帐户可见,但与我的帐户没有关联,因此signtool
在没有明确提供文件名和密码的情况下拒绝识别它。当作为构建过程的一部分完成并在批处理文件或源文件中明确写入时,可能不够安全。(导入原始 CA 颁发的证书解决了它。)
我有相同的“在私钥过滤器之后,留下 0 个证书”消息并且我花了太多时间试图弄清楚消息的含义。
问题是我在 Windows 证书存储中错误地安装了证书,因此没有与代码签名证书关联的私钥。
我应该做的是:
使用 Firefox 或 Internet Explorer,将请求提交给颁发者。这会生成一个由浏览器静默存储的 PRIVATE KEY(在 Firefox 中会出现一个对话框,持续不到一秒)。请注意,其他浏览器可能无法运行:您的生命太短了,无法确定它们是否可以运行。
提交请求,跳过发行人的验证循环,牺牲一只山羊,向众神祈祷,提交曾祖父母的签名声明等。
下载证书 (.crt) 并将其导入同一浏览器。浏览器现在同时拥有私钥和证书。
将证书从浏览器导出为个人信息交换 (.p12) 文件。您将被要求提供密码以保护此文件。
保留 .p12 文件的备份副本。
运行证书管理器 (certmgr.msc),右键单击个人证书存储,选择所有任务/导入...并将 .p12 文件导入 Windows。系统将要求您输入用于保护文件的密码。此时,根据您的安全要求,您可以将密钥标记为可导出,以便您可以从 Windows 应用商店恢复副本。如果要破坏批处理脚本,还可以在使用前标记需要密码。
成功运行 signtool,松了一口气,并思考由于错误消息和文档不佳或缺少文档,您浪费了多少生命。
我的问题最终是我不了解 signtool 选项。我提供的 /n 选项与我的证书不匹配。当我删除它停止抱怨。
使用 /debug 时,当您收到此消息“在私钥过滤后,剩下 0 个证书。”时,一个原因可能是 pfx 文件没有私钥。当您将安装的证书导出到 pfx 文件时,请确保启用该复选框以包括私钥。
我也遇到过这个问题,试过很多。使用了 SDK 和 Visual Studio 签名,但我到处都得到“没有找到符合所有给定条件的证书”。
解决方案:请注意,如果 "after private key filter": '0 left' 显示带有选项 signtool sign /debug...,则原因是您的 PC 在商店中没有 CA 本身。要解决此问题,请先安装 CA(在我的情况下为 .crt 文件),然后再次运行该标志。它现在应该可以工作了!
Signtool 只能与同一台 PC 请求和拥有的 CA 一起使用。
我遇到了类似的问题,我的计算机名称已更改并且证书已过期。我能够通过创建一个新的测试证书来解决这个问题。
在 Visual Studio 中,右键单击解决方案资源管理器中的项目。选择属性。选择登录属性窗口。单击“创建测试证书....”。输入测试证书的密码信息,然后单击确定。
转到并取消选中初始化编译之前的project properties
所有字段Firm