2012-03-02 168 views
5

目前,我在Linux機器上爲使用NSIS的程序生成安裝程序。 NSIS二進制文件已經爲Ubuntu編譯,使用.nsi腳本沒有任何困難。但是,生成的setup.exe文件是未簽名的。這會給我們的用戶造成可怕的警告,這些用戶通過大多數常見的Web瀏覽器下載安裝程序,以及運行時從Windows本身發出警告。在Linux上籤署NSIS安裝程序

我們想避免這些警告,除非我失去了一些東西,需要使用Windows工具簽署生成setup.exe文件。有沒有辦法在非Windows機器上執行此操作?

不幸的是,每個安裝是唯一的(不同的文件是根據客戶的要求捆綁,幷包含一個唯一的ID),所以我無法登錄Windows計算機上安裝程序,然後上傳。對於Windows

回答

1

幾星期前,我不得不這樣做,不用酒。我所做的是將pfx文件導入到Windows,然後使用「如果可能,將所有證書包含在證書路徑中」選項導出。然後我遵循this page的說明。

之後,你有所有的證書(SPC和PVK文件),你應該使用以下命令:

signcode -spc [spc file] -v [pvk file] -a sha1 -$ commercial -t http://timestamp.verisign.com/scripts/timstamp.dll -tr 10 [exe file to sign] 

我必須安裝單開發包:

sudo apt-get install mono-devel 
+0

OpenSSL報告'-pvk-strong'是一個未知選項。我試圖省略它,但運行'signcode'時遇到錯誤;它會提示輸入密碼。我認爲這與我從Windows導出證書時使用的是一樣的,但這不起作用。我在哪裏誤入歧途? – 2012-03-05 04:29:44

+0

原來下載最新版本的OpenSSL並構建它擺脫了那個錯誤。不知道爲什麼Ubuntu沒有在apt中。 :( – 2012-03-05 05:08:53

+0

@Tom G:因爲他們試圖保持事情穩定,LTS發佈頻道更是如此,Debian更加保守。 – 0xC0000022L 2012-04-09 00:14:21

0

簽名文件使用Microsoft驗證簽名。 SDK中有一個工具用於簽署可執行文件和DLL(signtool.exe)。你可以使用Wine來運行它。

也可以通過Windows API調用簽名文件 - 這些功能也可以在Wine中實現,但我有點懷疑它,因爲Authenticode僅由Microsoft使用和實現(據我所知)。

但是這個工具並不非常多 - 它基本上追加證書並在文件末尾簽署時間戳。 Linux也可能存在適應性。

這裏是一個link的人誰得到它使用signcode工作。

6

您最好的選擇可能是使用:osslsigncode。爲我構建(確保有OpenSSL標頭可用)。但是,內核模式簽名策略可能會遇到困難,儘管(將父證書嵌入到根目錄中) - 所以您最終可能仍然需要使用WINE。

+1

osslsigncode爲我工作。現在我可以使用pfx簽署exes了,謝謝。 – 2012-07-02 09:57:34