当我尝试从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)。我还能够发现我们系统之间的其他任何差异。
bool Certificate::HasPrivateKey()
返回false,因为CryptAcquireCertificatePrivateKey
失败了。首先要快速处理NCryptOpenKey
失败。尝试打开存储私钥的文件时失败,因为在非管理员身份下运行时被拒绝访问。这很奇怪,因为它要求只读访问权限。需要在调试器下查看此失败。我无法重现此问题。 - RbMm