【发布时间】:2019-10-27 01:24:01
【问题描述】:
我正在设置一台新的开发笔记本电脑,并安装了自发行的代码签名证书。我可以在我当前用户的个人证书下的 certmgr 中看到它。
当我尝试从 Visual Studio 2017 的开发人员命令提示符构建时,我得到:error : SignTool Error: No certificates were found that met all the given criteria.
这在我的旧笔记本电脑上总是很好用。
我发现如果我在以管理员身份启动后从命令提示符运行相同的构建,signtool 会成功并且可以找到证书。
我们设置新笔记本电脑时,有 3/4 的同事遇到过这种情况。一个人没问题,无需以管理员身份运行即可签名。在我们的旧笔记本电脑上,我们无需以管理员身份运行。
我尝试用谷歌搜索找出可能的原因,因为我不知道是否以管理员身份运行应该对此有任何影响。我没有找到任何关于这个问题的参考。
我们如何在不以管理员身份运行的情况下使用 signtool.exe?
当不以管理员身份运行时,它似乎在私钥过滤步骤中,我希望被选中的证书被过滤掉:
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.12
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\>signtool sign /v /debug /ph /i "<issuedby>" /fd sha256 /td sha256 "C:\TestSign.dll"
The following certificates were considered:
Issued to: Scott Langham
Issued by: <issuedby>
Expires: Sun Sep 25 09:54:55 2022
SHA1 hash: <a_hash>
Issued to: Scott Langham
Issued by: <issuedby_somethingelse>
Expires: Wed May 13 15:51:14 2020
SHA1 hash: <b_hash>
After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Issuer Name filter, 1 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.
我已确保我正在使用的 signtool.exe 版本与我的同事正在使用的版本相同 (10.0.18362.1)。我已经能够发现我们系统之间的任何其他差异。
【问题讨论】:
-
看起来其他人也有类似的问题。解决方案是以管理员身份运行。我希望能够不像过去那样以管理员身份运行。 stackoverflow.com/a/56342401/11898
-
您是否尝试过使用签名证书的 SHA1 指纹进行签名? (/sha1 选项)。我一直觉得这是最简单的方法。
-
这意味着您的 signtool.exe 中的
bool Certificate::HasPrivateKey()返回 false。因为CryptAcquireCertificatePrivateKey失败。更快NCryptOpenKey失败。尝试打开存储您的私钥的文件时失败,因为当以管理员身份运行时访问被拒绝。这很奇怪,因为它要求只读访问。需要在调试器下查看失败的地方。我无法重现此问题 -
您曾写过“这在我的旧笔记本电脑上一直运行良好。”你的旧笔记本电脑是什么操作系统,你的新笔记本电脑是什么操作系统?
-
@Aleksandar 旧笔记本电脑是 Win8.1,新的是 Win10。但这也发生在同事身上,他们也有新的笔记本电脑,他们的旧笔记本电脑是 Win10。
标签: windows certificate code-signing code-signing-certificate signtool