我想弄清楚在我的一個項目中Authenticode簽名二進制文件的最簡單和最安全的方法。在MSI中解壓縮,修改和重新打包文件?
我能看到的最簡單的方法是獲取編譯結果 - 一個包含我所有二進制文件的完整安裝包 - 從中提取程序集,簽名它們,然後重新包裝MSI中的這些簽名程序集然後得到簽名。
很多關於從MSI解壓文件的信息,但沒有關於重新打包它們的信息。我該怎麼做?
我想弄清楚在我的一個項目中Authenticode簽名二進制文件的最簡單和最安全的方法。在MSI中解壓縮,修改和重新打包文件?
我能看到的最簡單的方法是獲取編譯結果 - 一個包含我所有二進制文件的完整安裝包 - 從中提取程序集,簽名它們,然後重新包裝MSI中的這些簽名程序集然後得到簽名。
很多關於從MSI解壓文件的信息,但沒有關於重新打包它們的信息。我該怎麼做?
編輯我的原始響應....
如果要嵌入登錄到您的無人值守的構建過程中,你可以使用的MSBuild SignFile任務,它包裝的驗證碼簽名的API http://msdn.microsoft.com/en-us/library/ms164304.aspx
或者只是使用對SignTool.exe的調用。
您需要使用certmgr.exe或證書mmc snapin將軟件發佈證書安裝到計算機上。安裝到本地證書存儲區後,只需使用SHA指紋進行引用即可在證書屬性中找到該證書,或者只需在certmgr.exe中列出證書即可。
我們必須定期更新我們的證書,以便我們在構建中有額外的步驟,在構建開始時在本地重新導入證書,並提取證書哈希。我建議不要在源代碼控制中存儲哈希值,以防止必須返回並構建舊版本 - 它應該是您環境配置的一部分,例如,一個env var或者其他可以與源代碼分離的東西。
此外,不要忘了給簽名文件加上時間戳,以保證簽名的有效性。我還建議你將時間戳中的簽名分開。時間戳是一種偶爾會出錯的網絡操作,因此能夠區分簽名失敗和時間戳失敗很有用,因爲時間戳失敗只是可能公開發布的黃金版本的一個問題。
你沒有說明你的編譯系統是什麼,但(過於簡化)流我的項目經歷如下
signtool.exe
標誌的所有相關文件(例如EXE,DLL,OCX)如果沿途任何地方發生故障,則不僅僅是電子郵件的開發團隊。
你應該能夠MSBuild的,南特,或其他各種工具來做到這一點。它可能會涉及到地方一點點的定製工作,但最終的結果是可靠的構建系統,需要與構建零人機交互(除非有人想「力」的生成,甚至只是點擊一個按鈕網頁或東西)
似乎是一週的工作,以找出如何設置這一切。 TFS在這裏,順便說一句。任何詳細的教程? – Will 2011-04-12 12:49:26
也從沒使用TFS,但這個版本系統已經發展超過三年......我們剛開始的基本知識,並在有一點版本之間的停機時間的自動化更隨着時間的推移。 – saschabeaumont 2011-04-18 01:57:45
你好請問你有沒有發現一個問題的答案?我也有興趣通過一種方法來安全地做到這一點。我也看到了你的其它類似的問題:http://stackoverflow.com/questions/4026044/how-do-you-integrate-authenticode-into-your-build-process。今天有什麼指針? – 2011-03-03 10:50:06
@Seb不幸的不是。任何這些都沒有自動化解決方案。我仍然希望爲之一,但目前我必須手動執行發佈構建簽名構建安裝程序過程。 – Will 2011-03-03 14:09:14
好的,謝謝你的輸入。 – 2011-03-03 14:55:47