我的问题与this one有关。 las,这个问题是关于不同的CA(Symantec),并且使用了不同的硬件令牌(来自Safenet),并且尽管那里提供的解决方案与错误代码匹配,但我的情况不正确(尤其是智能卡)提供给我的似乎没有在HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers
下注册自己的提供程序。
我正在使用certum.pl中的开放源代码签名证书。我正在使用Windows SDK signtool.exe
中的10.0.18362.0
,并且看到以下错误(signtool sign /v /debug
):
signtool.exe sign /v /debug /a /i Certum /ph /du "https://my.url" /d "short description" /fd sha256 /tr "http://timestamp.digicert.com" /td sha256 "mysoftware.exe"
The following certificates were considered:
Issued to: Open Source Developer, ...
Issued by: Certum Code Signing CA SHA2
Expires: ...
SHA1 hash: ...
Issued to: Open Source Developer, ...
Issued by: Certum Code Signing CA SHA2
Expires: ...
SHA1 hash: ...
After EKU filter, 2 certs were left.
After expiry filter, 1 certs were left.
After Issuer Name filter, 1 certs were left.
After Private Key filter, 1 certs were left.
The following certificate was selected:
Issued to: Open Source Developer, ...
Issued by: Certum Code Signing CA SHA2
Expires: ...
SHA1 hash: ...
Done Adding Additional Store
Error information: "Error: SignerSign() failed." (-1073741275/0xc0000225)
SignTool Error: An unexpected internal error has occurred.
错误代码0xC0000225
与以下NTSTATUS
完全匹配:
//
// MessageId: STATUS_NOT_FOUND
//
// MessageText:
//
// The object was not found.
//
#define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225L)
...这很有意义,给定HRESULT
使用的signtool.exe
代码,并且基础架构将1:1映射到NTSTATUS
(当然if给出了设施代码,HRESULT
存在ntstatus.h
中没有名称的代码...我的意思是HRESULT
和NTSTATUS
的布局。
A,这什么也没告诉我,因为在任何给定时间都可能找不到很多东西……在撰写本文时,我仍在尝试使用ProcMon自行缩小范围。对于失败的尝试,我在ProcMon中看到592 NAME NOT FOUND
的结果,该结果应该对应于上面的NTSTATUS
代码;其中大多数用于注册表项和值。
这里又是完整的signtool
命令行:
“ C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe” sign / v / debug / a / i Certum / ph / du“ https://my.url” / d “简短说明” / fd sha256 / tr“ http://timestamp.digicert.com” / td sha256“ mysoftware.exe”]
...,是的,我验证了它确实在使用signtool.exe
...实际上,我尝试使用具有完整路径的x86和x64进行了很好的测量(我的实际脚本包含了一些复杂性,并准备了要调整的环境PATH
可以在没有完整路径的情况下调用signtool.exe
。
足够奇怪的是,使用SHA1摘要进行签名时,它的工作原理如下:
“ C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe” sign / v / debug / a / i Certum / ph / du“ https://my.url” / d “简短说明” / t“ http://timestamp.digicert.com”“ mysoftware.exe”
(差异是缺少时间戳的服务URL的/fd sha256
和/td sha256
以及/t
而不是/tr
,即不同的协议)
proCertum CardManager软件的版本为3.2.0.156,详细信息根据以下屏幕截图:
(这是撰写本文时Certum网站上的最新版本。)
与此同时,我也尝试了signtool.exe
(分别来自x86和64):
...相同的结果,我对如何解决这个问题感到困惑。
结果证明,这个问题是默认情况下未正确设置的选项(名称表明它仅适用于EV证书,但似乎也适用于具有SHA2摘要的证书)。感谢Certum的支持!
我强调了相关选项。
还请注意,我必须
...当我以前尝试不进行提升时,该过程失败。是的,我看到了“盾牌”图标,但是我已经假定该应用程序包含执行高程的逻辑(没有)。
重新启动后重新尝试签名时,不再是proCertum CardManager提示输入卡的PIN,而是Windows。签名就像一种魅力。
NB:在这些步骤之后,HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers
下仍然没有任何条目。