13

我正在使用 signtool 对一些 Windows 安装文件和应用程序可执行文件进行代码签名。我正在使用的命令是:

signtool sign /f "\path\to\certfile.pfx" /p "certPassword" /tr http://tsa.starfieldtech.com /td SHA256 "path\to\setup.exe"

/tr选项使签名带有指定时间戳服务器的时间戳。指定摘要/td算法(散列函数)。

此命令通常由我们的一台远程服务器上的自动代码签名作业执行。该作业签署了 22 个不同的可执行文件,其中一半是安装文件,另一半是应用程序可执行文件。通常,在签名作业的某个时刻,命令在其中一个文件上失败。它并不总是一种或其他类型的 exe,它发生在两种类型上。错误是:

Done Adding Additional Store  
Error information: "SignerTimeStampEx2() failed." (-2146881278/0x80093102)  
SignTool Error: An unexpected internal error has occurred.  
Sign command failed with exit code 1.  

MSDN 文档指出该代码0x80093102意味着:

CRYPT_E_ASN1_EOD - ASN1 unexpected end of data.

我检查了服务器的 Windows 事件日志并没有找到任何相关消息。

我重新运行该作业,它有时会在不同的 exe 上失败,有时它会成功签署所有文件。请注意,该作业不会重建 exe,它每次都使用相同的源 exe。我已经使用相同的可执行文件在本地多次运行相同的作业,并且从未遇到过问题。似乎只有当我从远程服务器运行时。基于这一事实,记录的错误信息和结果代码解释的文本,听起来要么连接到时间戳服务器有问题,要么与服务器通信时出错。

这个错误到底是什么意思,我该如何解决这个问题?

更新:我已经修改了我的签名脚本,当单个 exe 在该 exe 上失败时重试签名最多五次。在我的本地机器上测试该更改时,我实际上遇到了相同错误的实例,表明这不仅仅是远程服务器上的问题。假设这只是联系时间戳服务器失败,这可能是我最好的选择。但是,我仍然想知道错误的确切原因是什么。

4

0 回答 0