2

我需要数字签名& timestamp PE文件(实际上是EFI)在Linux上。我发现了3个用于签署PE文件的工具:pesign,osslsigncodesigncode(单声道),但它看起来没有一个完全符合我的需要。问题是,关键在硬件令牌上,无法导出。因此我必须创建一个证书数据库,在那里添加令牌驱动程序,并通过这个数据库进行工作。只有pesign允许这个,但它不支持时间戳。 osslsigncodesigncode支持时间戳,但它们不能使用数据库。如何将时间戳证书添加到Linux上的签名PE文件?

Windows signttool.exe可以执行签名和时间戳作为单独的步骤。所以我想,我可能会使用pesign签署该文件,然后仅使用其他工具对其进行时间戳记。但是,据我所知,osslsigncodesigncode不支持单独的时间戳(在osslsigncode项目中,它列在TODO文件中,但在存储库中没有任何标记)。

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

P.S.我也尝试在酒下运行signtool.exe,但1)未能使其工作,并且2)我不确定它是否在法律上允许(我不善于分析EULA)。

回答

2

自2015年3月以来,有一个patchosslsigncode它允许您通过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

+0

请您详细说明该修补程序如何提供帮助?我设法编译osslsigncode,但我不明白“pkcs11engine”和“pkcs11module”是什么。我尝试使用SafeNet的libeToken.so作为模块,并使用engine_pkcs11作为引擎(我也必须使用libp11编译它),但是当我尝试签名文件时失败:“无法读取证书文件:(null)”从源代码我可以看到,引擎+模块方案仍然需要-certs参数。我在哪里得到它?我只有一个令牌。 – 2015-07-12 15:05:50

+0

我已经扩展了我的答案 – mat 2015-07-13 09:10:09

+0

我不明白我应该提供什么证书,以及如何获得slotID和keyID,但是当我简单地从令牌导出证书时,'osslsigncode'同意签署我的测试文件,即使没有'-key'参数。这只是有点令人困惑,为什么我应该明确地导出证书,如果程序可以直接从令牌中获取它......但是好的。我还没有进行广泛的测试,但乍一看它看起来工作得很好。感谢您的提示! – 2015-07-15 22:13:04

1

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

还通过PKCS#11接口支持硬件令牌。

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

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

https://www.signserver.org/

+0

有趣的是,当然,我已经以简化的形式自己实现了完全相同的方法。 :-)谢谢,如果我们需要更大的东西,我会记住SignServer。 – 2016-06-20 14:38:33

相关问题