我的问题与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):
...相同的结果,我对如何解决这个问题感到困惑。
答案 0 :(得分:2)
原来的问题是,默认情况下未正确设置此选项(名称建议该选项仅适用于EV证书,但 似乎也适用于具有SHA2摘要的证书)。感谢Certum的支持!
我突出显示了相关选项。
还请注意,我必须
...当我以前尝试不进行提升时,该过程失败了。是的,我看到了“盾牌”图标,但是我已经假定该应用程序包含执行高程的逻辑(没有)。
重新启动后重新尝试签名时,不再是proCertum CardManager提示输入卡的PIN,而是Windows。签名就像一种魅力。
注意::在这些步骤之后,HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers
下仍然没有条目。