Signtool错误:在Windows Store应用程序中找不到满足所有给定条件的证书?

393
我正在尝试使用我拥有的pfx文件对Windows 8 appx包进行签名。 我使用了以下命令:

我正在尝试使用我拥有的pfx文件对Windows 8 appx包进行签名。我使用了以下命令:

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

因此,我得到了以下信息:

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

哪些“标准”我没有达到?这只是为了测试所以这些都是自签名证书。我已经尝试导入密钥然后进行签名,但总是出现相同的错误。我该如何解决这个问题?


我认为 Signtool 正在尝试在受信任的根证书存储中查找证书,而您在那里没有代码签名证书。 - crea7or
31
我曾经遇到过这个错误,原因是用于签名的证书已经过期了。 - Mark Homer
1
我曾经遇到过类似的问题,并在这里发布了一个答案。希望能对你有所帮助。 - SurenSaluka
22个回答

745

在 Visual Studio 中出现此错误是因为设置了签名证书,以匹配最初开发计算机。

您可以通过进入项目属性 > 签名选项卡并检查证书详细信息来验证此情况。

要禁用签名,您可以取消选中“对 ClickOnce 清单进行签名”。

Signing Properties

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


16
补充一下@JDandChips所建议的:为了调试和测试目的,您还可以通过点击上面截图中显示的“创建测试证书”按钮来使用临时测试证书。 - nam
你说的“安装证书”是什么意思? - Sean Kendle
在我的情况下,证书可以从最初开发它的机器上获取,因此我可以选择“从文件中选择...”来安装缺失的证书。或者,您始终可以创建一个新的证书并使用它! - JDandChips
1
@JDandChips 你如何创建新证书? - erotavlas
7
针对 Visual Studio 新手,确保你右键单击项目而不是解决方案,因为这将弹出完全不同的菜单! - B5A7
显示剩余3条评论

175

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


6
可以。虽然我不理解signtool的反应,但“/debug”完成了它应该完成的工作。赞同! - noelicus
2
这个命令特别注重 /debug 的位置。如果你放错了位置,它会报错。 - Daniel
15
/debug 仅适用于特定版本的 signtool.exe。随 WDK 提供此选项的版本可用,而来自 Windows SDK 的版本则没有。 - Paul Kertscher
3
同时,/debug 必须放在 signtool sign 之后,不能放在中间。 - Denis V
1
证明我的证书已过期。干得好。 - Observer
显示剩余2条评论

60

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

转到项目属性,然后,

点击签名选项卡,取消选中“对ClickOnce清单进行签名”。

图片描述:

输入图像描述

输入图像描述

另外,您还可以查看这个一分钟以下的视频解决方案。上面的图片来自该视频。


1
您也可以点击“创建测试证书”继续。谢谢。 - MindRoasterMir
1
取消勾选此框意味着当第三方尝试从网络安装您的软件时,Windows安全性将阻止该应用程序运行。 您需要一个适当的代码签名证书,并且必须使用它对ClickOne清单进行签名。 - Chris Bordeman
@ChrisBordeman 感谢您提供的信息!我刚刚分享了一个快速解决方案,以便开发不会停止 :) 无论如何,正如您所提到的,安全功能需要得到适当修复。 - Muhammad Faizan Khan
请注意,如果在出现错误之前已经使用证书部署了应用程序,而您现在取消选中该证书,对于最终用户来说,这就像安装一个新的应用程序。这也意味着他们将无法自动更新。只要您不进行部署,这可能是一个快速的解决方法,但您必须在重新部署之前修复此问题。 - bkqc
它在我的WPF桌面应用程序中运行成功。 - MindRoasterMir

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

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


6
要查看证书的到期日期,打开命令行,进入证书所在的目录,然后输入 certutil -dump mycertificate.pfx。找到最后一条记录,因为前面几条是证书颁发机构而不是你的代码签名证书。 - JsAndDotNet

32
如果您不需要对应用程序签名,右键单击您的项目。 项目属性 -> 签名 -> 取消选中“签署 ClickOnce 清单” 此外,正如微软文章所建议的那样,

如果使用的是 Visual Studio 2008 并且针对 .NET 3.5 并使用自动更新,则可以更改证书并部署新版本。


1
您也可以点击“创建测试证书”继续。谢谢。 - MindRoasterMir

19

在我的情况下,我使用了错误的证书类型来尝试关联证书。
我之前使用的是"服务器身份验证"而不是"代码签名"证书。
您应该能够在证书快照中的"预期目的"部分中看到这一点。
之后,它就能正常工作了。


2
是的,我挣扎了2天寻找这个答案。 - Hakan Fıstık
1
你在哪里更改这个选项? - sinsedrix
New-SelfSignedCertificate -Type CodeSigning - Frank Myat Thu

16

遇到了同样的问题,结果是证书的私钥没有权限。
解决方法-打开证书管理器,找到您的证书,右键单击-> 管理私钥,然后在顶部的安全性中确保已添加并授予权限给您的用户,这对我有用。


15

如果还有其他人遇到类似问题:我的问题最终是我需要以管理员身份运行命令提示符才能使用 signtool.exe 应用程序。然后一切都可以正常工作。


15
在我的情况下没有帮助。 - bgplaya
1
我正在作为脚本从VS2015运行signtool,并且我遇到了相同的问题。我以管理员身份运行了VS2015,signtool就能够签署我的文件。 - hamaney

15

只需在项目属性的签名选项卡中取消选择“签署ClickOnce清单”,即可解决该错误,并可以从那里创建新的清单。


12

我遇到了这个问题,但不确定是以下哪一步解决的。希望能帮到其他人...这是我所做的:

  • 将下载的证书(.crt)安装到证书中(我将它放在“个人”存储区) - 右键点击.crt文件并单击安装证书
  • 运行certmgr.msc并将证书(在第1步中使用的任何存储区中找到)导出为包括私钥和扩展属性的PFX文件
  • 在签署项目时使用导出的.pfx文件
  • 示例signtool: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    其中密码与导出期间提供的相同

1
谢谢,这个方法很有效。我之前一直在使用Comodo提供的.crt文件,而不是安装证书并导出.pfx文件。 - Joshua Pinter
1
非常感谢! - Bruno Soares
我敢打赌这会解决我的问题,但当我尝试导出 .PFX 选项时,它是灰色的。我可能需要请求一个新的证书,并启用导出私钥的选项? - Josh P
请确保将证书安装到“当前用户”(certmgr)而不是“本地计算机”(certlm)存储中,否则VS无法定位它。 - Reahreic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接