如何将时间戳证书添加到 Linux 上的已签名 PE 文件?
How to add timestamp certificate to a signed PE file on Linux?
我需要在 Linux 上对 PE 文件(实际上是 EFI)进行数字签名和时间戳。我找到了 3 个用于签署 PE 文件的工具:pesign
、osslsigncode
和 signcode
(单声道),但似乎 none 非常符合我的需要。问题是,密钥在硬件令牌上,无法导出。因此我必须创建一个证书数据库,在那里添加令牌驱动程序条目并通过该数据库工作。只有 pesign
允许这样做,但它不支持时间戳。 osslsigncode
和 signcode
支持时间戳,但不能使用数据库。
Windows signttool.exe
可以作为单独的步骤执行签名和时间戳。所以我想,我可能会使用 pesign
对文件进行签名,然后仅使用其他工具为其添加时间戳。但正如我发现的那样,osslsigncode
和 signcode
不支持单独的时间戳(在 osslsigncode
项目中,它列在 TODO
文件中,但在存储库中没有任何迹象)。
我是否遗漏了一些工具?是否有不太低级的库可以让我自己编写这样的程序? (最好是 C/C++/Perl/Python。)我试图从 osslsigncode
获取时间戳代码,但未能轻松地将其与先前的步骤分离(删除现有签名并添加新签名) ).
P.S。我也尝试在 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
.
SignServer Enterprise Edition 支持使用 Authenticode 对 PE 文件进行签名和时间戳。
还通过 PKCS#11 接口支持硬件令牌。
SignServer 通常设置在单独的服务器或 VM 上,最好在 Linux 上运行(但也支持 Windows)。
您想要签名的文件可以简单地使用 HTTP POST 发送到服务器,然后响应就是签名的文件。
当前 osslsigncode
有时间戳选项 -t
:
osslsigncode sign \
-pkcs12 cert.pfx -pass "**********" \
-t http://timestamp.digicert.com \
-in app.exe -out app-sign-with-timestamp.exe
我需要在 Linux 上对 PE 文件(实际上是 EFI)进行数字签名和时间戳。我找到了 3 个用于签署 PE 文件的工具:pesign
、osslsigncode
和 signcode
(单声道),但似乎 none 非常符合我的需要。问题是,密钥在硬件令牌上,无法导出。因此我必须创建一个证书数据库,在那里添加令牌驱动程序条目并通过该数据库工作。只有 pesign
允许这样做,但它不支持时间戳。 osslsigncode
和 signcode
支持时间戳,但不能使用数据库。
Windows signttool.exe
可以作为单独的步骤执行签名和时间戳。所以我想,我可能会使用 pesign
对文件进行签名,然后仅使用其他工具为其添加时间戳。但正如我发现的那样,osslsigncode
和 signcode
不支持单独的时间戳(在 osslsigncode
项目中,它列在 TODO
文件中,但在存储库中没有任何迹象)。
我是否遗漏了一些工具?是否有不太低级的库可以让我自己编写这样的程序? (最好是 C/C++/Perl/Python。)我试图从 osslsigncode
获取时间戳代码,但未能轻松地将其与先前的步骤分离(删除现有签名并添加新签名) ).
P.S。我也尝试在 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
.
SignServer Enterprise Edition 支持使用 Authenticode 对 PE 文件进行签名和时间戳。
还通过 PKCS#11 接口支持硬件令牌。
SignServer 通常设置在单独的服务器或 VM 上,最好在 Linux 上运行(但也支持 Windows)。
您想要签名的文件可以简单地使用 HTTP POST 发送到服务器,然后响应就是签名的文件。
当前 osslsigncode
有时间戳选项 -t
:
osslsigncode sign \
-pkcs12 cert.pfx -pass "**********" \
-t http://timestamp.digicert.com \
-in app.exe -out app-sign-with-timestamp.exe