2010-04-23 40 views
16

我剛剛從THAWTE購買了代碼簽名證書(MS authenticode),並且已經在我的生成機器上安裝了它。我以用戶身份登錄,當我打開cmd提示時,我可以使用帶有signtool.exe的證書對EXE進行簽名。如何在作爲服務運行的hudson中正確使用signtool.exe?

不幸的是,這個相同的命令行在機器上運行的哈德遜過程中不起作用。

錯誤消息我得到的是:

SignTool Error: No certificates were found that met all the given criteria.

我相信這是因爲哈德森服務是在不同帳戶比我跑signtool.exe從和我用來獲取帳戶的帳戶運行來自thawte的證書。

所以,我的問題是:我該如何解決這個問題?我以爲我打算從thawte下載一個文件,但是它只是用IE以某種方式將這個證書神奇地安裝在用戶的緩存中。我可能想導出(或任何正確的術語)到一個文件,我可以存儲/保存或在任何其他機器上使用。

我該如何操作,以及如何正確使用系統/服務帳戶中的其他用戶的文件或證書來正確調用signtool?

回答

0

我認爲這將是一個簡單的問題來解決。相反,它正在變成希臘悲劇。

提供者Thawte顯然認爲,要求所有證書操作發生在請求發起的同一臺機器和瀏覽器上很有用。不幸的是,在我的情況下,我是從Windows7機器上完成的。由於一些MS廢話,這意味着當我獲得證書時,我不能用私鑰導出它。這隻能在Win2000上使用XP。所以我需要使用7年的操作系統來爲我的業務做一些基本的工作。這是令人興奮的。

事實證明,現在我正在等待證書的第三個請求被執行。

12

像往常一樣,文檔可幫助(摘自signtool簽署-h輸出):

/s <name> Specify the Store to open when searching for the cert. The default 
is the "MY" Store. 
/sm   Open a Machine store instead of a User store. 

得到這個工作是一個有點痛......我能得到它的工作通過增加證書發送到本地機器商店並使用/ sm開關。

/s開關允許您選擇使用哪個預定義存儲。不幸的是,我找不到任何列出實際可用選項的文檔(@Microsoft signtool maintainer:請記錄此!)。另外一個複雜的問題是,很難確定Hudson提供哪些存儲服務 - 它不像您所期望的那樣是本地安全哈德森賬戶。

注意:mmc視圖中列出的「Personal」商店是從signtool訪問時的「我的」商店。

謝天謝地,/ sm開關爲我們提供了一個無羈絆卡。不幸的是,如果您的構建服務器爲多個組織或部門運行作業,則這會造成安全風險。在我的情況下,它只被我的團隊使用,所以這並不妨礙我。

1

現在有點老了,但我只是有一個類似的問題,值得記錄我的想法。

我有一個運行在Win2008R2上的Jenkins CI服務器作爲在運行作業時找不到證書的服務,但手動我可以在同一臺機器上簽名任何東西。

signtool sign /sha1 ### file.dll 
SignTool Error: No certificates were found that met all the given criteria. 

問題是詹金斯服務是作爲本地機器運行 - 所以我認爲使用上述答案將工作。

signtool sign /sm /sha1 ### file.dll 

同樣的錯誤。 /a也沒有做任何事情。

我通過創建用戶'Jenkins'作爲管理員組成員,以用戶Jenkins的身份運行服務,以Jenkins用戶身份登錄並在用戶存儲中安裝證書來實現它。

是的,我沒有安裝證書作爲本地機器商店。我甚至確認服務商店使用mmc並添加了服務帳戶 - 詹金斯商店。

4

爲了便於參考,我將在此添加我們的經驗。我們正在使用TeamCity來構建簽名的ClickOnce應用程序。我花了好幾個小時才搞定了這個,所以我希望這能節省一些時間。

注:我在Windows 2k3服務器上運行這也是域服務器(是的,我知道)。

  1. 我們使用代碼從GoDaddy的簽名證書。 CSR使用Internet Explorer生成的。因此,通過使用Internet Explorer完成問題,我基本結束了在我自己的帳戶下安裝的代碼簽名證書。

  2. ,因爲我需要在構建服務器上的證書,我在IE中選擇的是:

    [詳細]> [Internet選項]> [內容]> [證書]

    然後我右點擊證書和[導出]'編輯。我勾選了[導出個人密鑰]並選擇了PFX格式與[導出所有證書][導出所有屬性](不確定最後一個是否真的有必要)。最後,在指定位置後,我擁有了我的珍貴。

  3. 現在我已經準備好了一些真正的痛苦,但爲了避免細節,我會跳過討厭的hickups。由於TeamCity在System帳戶下運行,我需要在我們的構建服務器上擁有該帳戶下的此證書。

    C:所以構建服務器,I invoked上\>PSEXEC -i -s CMD

  4. 那向我扔的命令行,運行在系統用戶。現在我又打電話給我的生鏽IE:

    C:\>C:\ Program Files文件(x86)\ Internet Explorer \ iexplore。EXE

  5. 我導航我的方式向證書,並代替出口,我選擇導入並選擇了我剛纔導出的證書。我讓Windows選擇在哪裏存儲它們。

  6. 現在一切都已到位,讓ClickOnce使用證書籤署我們的應用程序。我們只需確保ClickOnce知道它。我不想將我們的密鑰文件放在代碼庫中,所以在我的本地Visual Studio項目屬性的[簽名]選項卡上,我勾選了[ClickOnce manifests]並使用了[Select from Store .. 。]而不是[從文件中選擇...]。這使我可以選擇我的本地安裝證書。在那個時候,VS創建了一個屬性<ManifestCertificateThumbprint>這是讓它在構建服務器上運行的最重要的事情。

    請注意,我還添加了一個時間戳服務器這是沒有義務,但強烈建議簽署軟件。否則,當您的證書過期時,您的軟件可能會停止驗證。對於GoDaddy,時間服務器是http://tsa.starfieldtech.com

    另外請注意,我沒有簽署大會(還)。只是告訴你知道這是可能的。

  7. 現在構建服務器會拿起項目文件和新鮮的ManifestCertificateThumbprint屬性,並將其提供給SignTool任務。爲了讓那個運行,我必須從C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin將signtool.exe的複製到構建服務器上的相同位置。

    嚴重的討厭的調試已經進入瞭解爲什麼signtool不工作。我拿出了諸如ProcMonProcess Explorer這樣的工具來找出哪些命令行正在請求哪些註冊表項。我重新創建了由SignTool調用的實際命令行,並使用這些工具觀察效果。

最後,經過很多激烈的開發和系統管理員的痛苦,我能夠部署我們簽名的ClickOnce應用程序。乾杯!

相關問題