我正在尝试使用我拥有的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错误:找不到符合所有给定条件的证书。
我没有满足什么“标准”?这仅用于测试,因此它们是自签名证书。我尝试导入密钥,然后对其进行签名,但是它始终会导致相同的错误。我该如何解决?
Answers:
通过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 -> uncheck "Sign the ClickOnce Manifest"
就像这篇 MS文章所建议的那样,
如果您使用的是Visual Studio 2008,并且以.NET 3.5为目标并使用自动更新,则只需更改证书并部署新版本,
就我而言,我尝试关联的证书类型错误。
我使用的是“服务器身份验证”,而不是“代码签名”。
您应该能够在“目标用途”部分的“证书捕捉”中看到此内容。
在那之后,它工作正常。
万一其他人遇到这个问题:我的问题最终是我需要在使用signtool.exe应用之前以管理员身份运行命令提示符。然后,一切都进行得很好。
我在控制台应用程序开发中遇到了同样的问题,作为一种快速的解决方法,
project properties
然后去
点击 signing
选项卡,然后取消选中“签署ClickOnce清单”。
图片描述:
仅供参考,您还可以观看不到一分钟的视频解决方案。上面的照片是从视频中拍摄的。
我遇到了这个问题,我不确定要执行哪个步骤,但是希望这可以对其他人有所帮助...这就是我所做的:
certmgr.msc
并导出证书(在第一步中使用的任何存储中均可找到),并将其导出为pfx文件,包括私钥和扩展属性(可能不必要)signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
.crt
是Comodo提供的文件,而不是安装证书然后导出.pfx
文件。
我遇到了同样的问题,阅读了一些答案(在此处发布),我看到我的证书已过期。
只需从我的开始项目中创建一个新的。然后在证书管理器中删除了过期的证书。
现在一切都可以编译了。
这些标准包括帐户名(与之关联的私钥),域,公司,有效期,预期目的等。
发生此错误的可能原因有很多,已经列出了一些原因。这是另一个提示:导入证书时,请确保您使用从证书颁发机构(CA)接收的原始文件,否则某些属性可能会丢失。
示例:最近,我尝试导入从同一计算机上的其他帐户导出的证书。该证书对我的帐户变为可见,但未与我的帐户关联,因此signtool
拒绝在未明确提供文件名和密码的情况下识别该证书。当将其作为构建过程的一部分完成并在批处理文件或源文件中明确写出时,可能不够安全。(导入原始CA颁发的证书即可解决。)
我有同样的“ 经过私钥过滤器之后,剩下0个证书 ”的消息,并花费了我一生的时间来弄清楚消息的含义。
问题是我在Windows证书存储区中错误地安装了证书,因此没有与代码签名证书关联的私钥。
我应该做的是:
使用Firefox或Internet Explorer,将请求提交给发行者。这将生成一个“私钥”,该私钥由浏览器以静默方式存储(在Firefox中,对话框会显示一秒钟的时间)。请注意,其他浏览器可能无法正常工作:您的寿命太短,无法确定它们是否起作用。
提交请求,跳过发行者的验证环和圈,牺牲山羊,向神祈祷,提交曾祖父母的签名声明等。
下载证书(.crt)并将其导入到同一浏览器中。现在,浏览器同时具有私钥和证书。
从浏览器将证书导出为个人信息交换(.p12)文件。系统将要求您提供密码以保护该文件。
保留.p12文件的备份副本。
运行证书管理器(certmgr.msc),右键单击“ 个人”证书存储,选择“ 所有任务/导入...”,然后将.p12文件导入Windows。系统将要求您提供用于保护文件的密码。此时,根据您的安全要求,可以将密钥标记为可导出,以便可以从Windows存储还原副本。如果要破坏批处理脚本,还可以标记使用前需要输入密码。
成功运行signtool,松一口气,并考虑由于错误的错误消息以及缺少文档或缺少文档而浪费的生命。
我遇到类似的问题,我的计算机名称已更改并且证书已过期。通过创建新的测试证书,我能够解决此问题。
在Visual Studio中,右键单击解决方案资源管理器中的项目。选择属性。选择“登录属性”窗口。单击“创建测试证书...。”。输入测试证书的密码信息,然后单击“确定”。
使用/ debug,当您收到此消息“在私钥过滤器之后,剩下0个证书。”,原因之一可能是pfx文件没有私钥。当您将已安装的证书导出到pfx文件时,请确保启用此复选框以同时包含私钥。
Signtool
是在受信任的根证书存储中查找证书,并且您那里没有代码签名证书。