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

相關問題