如何签名可执行文件以在WEC2013上执行

har*_*per 6 certificate x509certificate windows-embedded-compact

对于启用了安全性加载程序的WEC2013平台,我创建了一个自签名证书。证书具有以下属性

Key Usage: Digital Signature (80)
Enhanced Key Usage: Code Signing (1.3.6.1.5.5.7.3.3)
Run Code Online (Sandbox Code Playgroud)

证书已导出到文件ciroots.p7b和PFX文件。该ciroots.p7b描述已被添加到WEC2013平台Files文件夹位置。使用该平台构建的OS设计包括该文件的副本ciroots.p7b

PFX已用于使用以下命令对文件进行签名

signtool -f /path/to/PFX -p ThePassword example.exe
Run Code Online (Sandbox Code Playgroud)

这与描述相符。signtool命令修改了.EXE。生成的文件比原始文件大1kB。

在目标上启动OS设计并将签名的.EXE复制到目标后,应该可以执行该程序。但是开始失败并显示以下消息:

无法执行example.EXE

在WEC2013文档中描述的步骤中我错过了什么?如何准备可执行文件以在启用LVMOD的OS设计上运行?

尽管在签名过程中没有错误消息,但我可能错过了一些重要的属性。使用LVMOD进行代码签名的证书有什么要求?

编辑: 对应于丹尼尔斯评论,我使用了signtool来验证签名文件。该证书已安装在“受信任”存储区中的PC上(系统询问我是否要信任该证书)。使用SignTool验证文件签名时运行signtool,结果如下:

 C:\Test>signtool verify  example.exe 
 SignTool Error: A certificate chain processed, but terminated in a root
         certificate which is not trusted by the trust provider.

 Number of errors: 1

 C:\Test>signtool verify /pa example.exe
 Successfully verified: example.exe

 C:\Test>
Run Code Online (Sandbox Code Playgroud)

第一次调用失败,如signtool文档中所述:

如果前面的示例失败,则可能是签名使用了代码签名证书。SignTool默认使用Windows驱动程序策略进行验证。