2010-10-26 96 views
2

我想弄清楚在我的一個項目中Authenticode簽名二進制文件的最簡單和最安全的方法。在MSI中解壓縮,修改和重新打包文件?

我能看到的最簡單的方法是獲取編譯結果 - 一個包含我所有二進制文件的完整安裝包 - 從中​​提取程序集,簽名它們,然後重新包裝MSI中的這些簽名程序集然後得到簽名。

很多關於從MSI解壓文件的信息,但沒有關於重新打包它們的信息。我該怎麼做?

+0

你好請問你有沒有發現一個問題的答案?我也有興趣通過一種方法來安全地做到這一點。我也看到了你的其它類似的問題:http://stackoverflow.com/questions/4026044/how-do-you-integrate-authenticode-into-your-build-process。今天有什麼指針? – 2011-03-03 10:50:06

+0

@Seb不幸的不是。任何這些都沒有自動化解決方案。我仍然希望爲之一,但目前我必須手動執行發佈構建簽名構建安裝程序過程。 – Will 2011-03-03 14:09:14

+0

好的,謝謝你的輸入。 – 2011-03-03 14:55:47

回答

1

編輯我的原始響應....

如果要嵌入登錄到您的無人值守的構建過程中,你可以使用的MSBuild SignFile任務,它包裝的驗證碼簽名的API http://msdn.microsoft.com/en-us/library/ms164304.aspx

或者只是使用對SignTool.exe的調用。

您需要使用certmgr.exe或證書mmc snapin將軟件發佈證書安裝到計算機上。安裝到本地證書存儲區後,只需使用SHA指紋進行引用即可在證書屬性中找到該證書,或者只需在certmgr.exe中列出證書即可。

我們必須定期更新我們的證書,以便我們在構建中有額外的步驟,在構建開始時在本地重新導入證書,並提取證書哈希。我建議不要在源代碼控制中存儲哈希值,以防止必須返回並構建舊版本 - 它應該是您環境配置的一部分,例如,一個env var或者其他可以與源代碼分離的東西。

此外,不要忘了給簽名文件加上時間戳,以保證簽名的有效性。我還建議你將時間戳中的簽名分開。時間戳是一種偶爾會出錯的網絡操作,因此能夠區分簽名失敗和時間戳失敗很有用,因爲時間戳失敗只是可能公開發布的黃金版本的一個問題。

1

你沒有說明你的編譯系統是什麼,但(過於簡化)流我的項目經歷如下

    (我使用惡性任務幾乎一切,從CruiseControl.net觸發)
  1. 抓住一切從源頭控制
  2. 構建清潔工程
  3. 搶簽名的文件
  4. 使用signtool.exe標誌的所有相關文件(例如EXE,DLL,OCX)
  5. 構建MSI (與維克斯)
  6. 請在MSI一些自定義生成後任務
  7. 數字簽名的MSI
  8. (根據構建參數)與引導程序
  9. 壓縮MSI登錄引導程序
  10. 上傳到臨時區域
  11. 電子郵件構建的Dev + QA團隊已準備好進行測試。

如果沿途任何地方發生故障,則不僅僅是電子郵件的開發團隊。

你應該能夠MSBuild的,南特,或其他各種工具來做到這一點。它可能會涉及到地方一點點的定製工作,但最終的結果是可靠的構建系統,需要與構建人機交互(除非有人想「力」的生成,甚至只是點擊一個按鈕網頁或東西)

+0

似乎是一週的工作,以找出如何設置這一切。 TFS在這裏,順便說一句。任何詳細的教程? – Will 2011-04-12 12:49:26

+0

也從沒使用TFS,但這個版本系統已經發展超過三年......我們剛開始的基本知識,並在有一點版本之間的停機時間的自動化更隨着時間的推移。 – saschabeaumont 2011-04-18 01:57:45