如何将时间戳证书添加到Linux上已签名的PE文件?

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

Windows signttool.exe可以作为单独的步骤执行签名和时间戳.所以我想,我可能会使用pesign对文件进行签名,然后只使用其他工具对其进行时间戳.但正如我所发现的,osslsigncode和signcode不支持单独的时间戳(在osslsigncode项目中它列在Todo文件中,但在存储库中没有它的迹象).

我错过了一些工具吗?有没有太低级别的库可以让我自己编写这样的程序吗? (首选,C/C++ / Perl / Python.)我试图从osslsigncode获取时间戳代码,但未能轻易地从之前的步骤中删除它(删除现有签名并添加新签名).

附:我也尝试在wine下运行signtool.exe,但1)未能使它工作,2)我不确定它是否合法允许(我不擅长分析EULA).

最佳答案
自2015年3月起,osslsigncode中有一个patch,允许您通过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格式.

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...