STATUS_NOT_FOUND在signtool.exe中为“意外的内部错误”

我的问题与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中没有名称的代码……我的意思是HRESULTNTSTATUS的布局。

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,详细信息如以下屏幕截图所示:

STATUS_NOT_FOUND在signtool.exe中为“意外的内部错误”

(这是撰写本文时Certum网站上提供的最新版本。)


同时,我还尝试了以下方面的signtool.exe(分别为x86和64):

  • Windows 8.1 SDK
  • Windows 10.0.17763.0 SDK

...相同的结果,我对如何解决这个问题感到困惑。

super_grubby 回答:STATUS_NOT_FOUND在signtool.exe中为“意外的内部错误”

原来的问题是,默认情况下未正确设置此选项(名称建议该选项仅适用于EV证书,但 似乎也适用于具有SHA2摘要的证书)。感谢Certum的支持!

proCertum CardManager Options dialog

我突出显示了相关选项。

还请注意,我必须

  1. 退出应用程序(从TNA或“系统托盘”中退出)
  2. 从其程序文件夹中启动提升应用程序
  3. 选中复选框
  4. 点击“确定”按钮
  5. 关闭(成功)消息框
  6. 重新启动

...当我以前尝试不进行提升时,该过程失败了。是的,我看到了“盾牌”图标,但是我已经假定该应用程序包含执行高程的逻辑(没有)。

重新启动后重新尝试签名时,不再是proCertum CardManager提示输入卡的PIN,而是Windows。签名就像一种魅力。

注意::在这些步骤之后,HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers下仍然没有条目。

本文链接:https://www.f2er.com/3127342.html

大家都在问