我正在使用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 documentation表示0x80093102
代码表示:
CRYPT_E_ASN1_EOD - ASN1 unexpected end of data.
我已检查过服务器的Windows事件日志,但未找到任何相关消息。
我重新运行该作业,它有时会在不同的exe上失败,有时它会成功签署所有文件。请注意,作业不会重建exe,它每次都使用相同的源exe。我使用相同的可执行文件多次在本地运行同一个作业,从未遇到过问题。它似乎只有当我从远程服务器运行时。基于这一事实,记录的错误信息和结果代码说明的文本,听起来好像是连接到时间戳服务器时遇到问题,或者在与服务器通信时出错。
这个错误究竟是什么意思,我该如何解决这个问题?
更新:我修改了我的签名脚本,以便在该exe失败时重试单个exe的签名最多五次。在本地计算机上测试更改时,我实际遇到了同一错误的实例,表明它不仅仅是远程服务器上的问题。假设这只是联系时间戳服务器的失败,这可能是我最好的选择。但是,我仍然想知道错误的确切原因是什么。