STATUS_NOT_FOUND 作为 "An unexpected internal error" 在 signtool.exe
STATUS_NOT_FOUND as "An unexpected internal error" in signtool.exe
我的问题与 this one 有关。 las,这个问题是关于不同的 CA(赛门铁克)并使用不同的硬件令牌(来自 Safenet),虽然那里提供的解决方案与错误代码匹配,但我的情况不匹配(除其他外,智能卡我被提供似乎没有在 HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers
).
下注册自己的提供商
我正在使用来自 certum.pl 的开源代码签名证书。我正在使用 Windows SDK 10.0.18362.0
中的 signtool.exe
,我看到以下错误(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)
...这很有意义,给定 signtool.exe
使用的 HRESULT
代码和底层基础设施映射 1:1 到 NTSTATUS
(当然 如果给出了一个设施代码,HRESULT
代码存在ntstatus.h
中没有名字...我的意思是HRESULT
和[=20的布局=]).
唉,这并没有告诉我任何信息,因为在任何给定时间可能找不到很多东西......在撰写本文时,我仍在尝试使用 ProcMon 自行缩小范围。对于失败的尝试,我在 ProcMon 中看到了 592 NAME NOT FOUND
个结果,这应该对应于上面的 NTSTATUS
代码;其中大部分用于注册表项和值。
这里又是完整的 signtool
命令行:
"C:\Program Files (x86)\Windows Kits\bin.0.18362.0\x64\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"
... 是的,我证实它确实在使用 signtool.exe
... 事实上,我尝试使用具有完整路径的 x86 和 x64 进行良好测量(我的实际脚本包含了一些复杂性和准备环境以调整 PATH
以便能够在没有完整路径的情况下调用 signtool.exe
。
奇怪的是,它在使用 SHA1 摘要签名时有效,如下所示:
"C:\Program Files (x86)\Windows Kits\bin.0.18362.0\x64\signtool.exe" sign /v /debug /a /i Certum /ph /du "https://my.url" /d "short description" /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)来自:
- Windows 8.1 SDK
- Windows 10.0.17763.0 SDK
...相同的结果,我很困惑如何解决这个问题。
原来问题是默认设置不正确的选项(名称表明它只适用于 EV 证书,但似乎也适用于那些与 SHA2 摘要)。感谢 Certum 的支持人员!
我突出显示了相关选项。
另请注意,我必须
- 退出应用程序(来自 TNA 又名 "system tray")
- 从其程序文件夹
启动应用程序提升
- 选中复选框
- 点击确定按钮
- 关闭(成功)消息框
- 重启
...当我之前尝试过没有提升时,过程失败了。是的,我看到了 "shield" 图标,但我假设该应用程序包含执行提升的逻辑(它没有)。
当我在重启后重试签名时,提示输入卡 PIN 的不再是 proCertum CardManager,而是 Windows。签名就像一个魅力。
注意:在这些步骤之后 HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers
下仍然没有条目。
我的问题与 this one 有关。 las,这个问题是关于不同的 CA(赛门铁克)并使用不同的硬件令牌(来自 Safenet),虽然那里提供的解决方案与错误代码匹配,但我的情况不匹配(除其他外,智能卡我被提供似乎没有在 HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers
).
我正在使用来自 certum.pl 的开源代码签名证书。我正在使用 Windows SDK 10.0.18362.0
中的 signtool.exe
,我看到以下错误(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)
...这很有意义,给定 signtool.exe
使用的 HRESULT
代码和底层基础设施映射 1:1 到 NTSTATUS
(当然 如果给出了一个设施代码,HRESULT
代码存在ntstatus.h
中没有名字...我的意思是HRESULT
和[=20的布局=]).
唉,这并没有告诉我任何信息,因为在任何给定时间可能找不到很多东西......在撰写本文时,我仍在尝试使用 ProcMon 自行缩小范围。对于失败的尝试,我在 ProcMon 中看到了 592 NAME NOT FOUND
个结果,这应该对应于上面的 NTSTATUS
代码;其中大部分用于注册表项和值。
这里又是完整的 signtool
命令行:
"C:\Program Files (x86)\Windows Kits\bin.0.18362.0\x64\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"
... 是的,我证实它确实在使用 signtool.exe
... 事实上,我尝试使用具有完整路径的 x86 和 x64 进行良好测量(我的实际脚本包含了一些复杂性和准备环境以调整 PATH
以便能够在没有完整路径的情况下调用 signtool.exe
。
奇怪的是,它在使用 SHA1 摘要签名时有效,如下所示:
"C:\Program Files (x86)\Windows Kits\bin.0.18362.0\x64\signtool.exe" sign /v /debug /a /i Certum /ph /du "https://my.url" /d "short description" /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)来自:
- Windows 8.1 SDK
- Windows 10.0.17763.0 SDK
...相同的结果,我很困惑如何解决这个问题。
原来问题是默认设置不正确的选项(名称表明它只适用于 EV 证书,但似乎也适用于那些与 SHA2 摘要)。感谢 Certum 的支持人员!
我突出显示了相关选项。
另请注意,我必须
- 退出应用程序(来自 TNA 又名 "system tray")
- 从其程序文件夹 启动应用程序提升
- 选中复选框
- 点击确定按钮
- 关闭(成功)消息框
- 重启
...当我之前尝试过没有提升时,过程失败了。是的,我看到了 "shield" 图标,但我假设该应用程序包含执行提升的逻辑(它没有)。
当我在重启后重试签名时,提示输入卡 PIN 的不再是 proCertum CardManager,而是 Windows。签名就像一个魅力。
注意:在这些步骤之后 HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers
下仍然没有条目。