7

我需要在 Linux 上对 PE 文件(实际上是 EFI)进行数字签名和时间戳记。我找到了 3 个用于签署 PE 文件的工具:pesignosslsigncode( signcodemono),但似乎没有一个完全符合我的需求。问题是,密钥位于硬件令牌上,无法导出。因此我必须创建一个证书数据库,在那里添加令牌驱动程序条目并通过这个数据库工作。只pesign允许这样做,但不支持时间戳。osslsigncodesigncode支持时间戳,但他们不能使用数据库。

Windowssignttool.exe可以将签名和时间戳作为单独的步骤执行。所以我想,我可能会用它pesign来签署文件,然后只用另一个工具给它加上时间戳。但是正如我发现的那样,osslsigncode并且signcode不支持单独的时间戳(在osslsigncode项目中它在文件中列出TODO,但在存储库中还没有迹象)。

我错过了一些工具吗?是否有不太低级的库可以让我自己编写这样的程序?(最好是 C/C++/Perl/Python。)我试图从 获取时间戳代码osslsigncode,但未能轻松地将其与前面的步骤(删除现有签名并添加新签名)分离。

PS 我也尝试signtool.exe在 wine 下运行,但 1) 未能使其正常工作,以及 2) 我不确定它是否合法(我不擅长分析 EULA)。

4

3 回答 3

3

自 2015 年 3 月以来,osslsigncode中有一个补丁,允许您通过 PKCS#11 令牌上的密钥对代码进行签名。它还不是正式版本的一部分。所以你必须自己建造它,但它对我来说就像魅力一样。

示例调用如下所示:

osslsigncode sign -pkcs11engine /usr/lib/engines/engine_pkcs11.so -pkcs11module /usr/lib/libeTPkcs11.so  -certs ~/mysigningcert.pem  -key 0:42ff -in ~/filetosign.exe -out ~/signedfile.exe

-pkcs11module开关以 PKCS#11 库为参数,参数-key格式为slotID:keyID.

于 2015-07-07T07:46:34.953 回答
1

SignServer Enterprise Edition 支持使用 Authenticode 对 PE 文件进行签名和时间戳。

PKCS#11 接口也支持硬件令牌。

SignServer 通常设置在单独的服务器或 VM 上,最好在 Linux 上运行(但也支持 Windows)。

您想要签名的文件可以简单地通过 HTTP POST 发送到服务器,然后响应就是签名文件。

https://www.signserver.org/

于 2016-06-08T21:12:57.023 回答
0

当前osslsigncode有时间戳选项-t

osslsigncode sign \
  -pkcs12 cert.pfx -pass "**********" \
  -t http://timestamp.digicert.com \
  -in app.exe  -out app-sign-with-timestamp.exe

https://github.com/mtrojnar/osslsigncode

于 2021-03-11T14:13:16.857 回答