2017-08-07 258 views
1

我在Visual Studio 2017中安裝了VSTO程序。爲了使我在通過ClickOnce發佈並將文件託管在網絡上時安裝過程更加順暢,我購買了EV來自DigiCert的證書。在Visual Studio 2017上用EV證書籤名VSTO代碼

這是我買的 - https://www.digicert.com/code-signing/ev-code-signing/

所以我等了幾天,得到了我的USB令牌,設置好一切,現在當我與我看中新的證書籤名的應用程序...安裝平出失敗。

用戶得到的錯誤是: Customized Functionality in this application will not work because the certificate used to sign the deployment manifest for AppName or its location is not trusted. Contact your administrator for further assistance.

我接觸DigiCert的技術支持,他們基本上說,這是與Visual Studio 2017年和操作系統錯誤。

我然後叫委託,看看他們是否能確認,因爲他們也有EV證書: https://www.entrust.com/code-signing-certificates/#ev-code-signing-certificates

原來我猜,直到你買一個,他們不能回答這個問題。他們只是說,「買它,嘗試它,如果它不起作用,我們會給你你的錢回來。」

怎麼可能沒有人知道如何從Visual Studio簽名安裝?

我希望能夠簽署此安裝並使其正常工作。

+0

你有沒有想過這個? –

+0

是的,我做了...忘了發佈答案...現在就做。 – gotmike

+1

@FrederikHansen - 看看答案...希望有所幫助。 – gotmike

回答

2

經過在DigiCert的支持下花費了很多時間在電話上,我們終於找到了一個可行的過程。

在這種情況下,並不是顯而易見的是你最終會做很多代碼簽名。

因此,當您構建VSTO應用程序時,請使用EV證書對代碼進行簽名。然後,當你想發佈(使用ClickOnce)你將不得不再次簽名。

但即使在那之後,你必須重新簽署設置文件兩次更多的時間才能完成這一切!

在此花費大量時間之後,我現在有一個批處理文件執行最後的步驟,包括將設置文件同步到Amazon S3進行部署。

因此,這裏是我如何做到這一點:

  1. 一旦你安裝了USB加密狗,你設置在Visual Studio中您的應用程序,以引用正確 證書的「簽名」 部分。
  2. 用鼠標右鍵單擊您的項目,然後單擊Build(或Rebuild爲 保險櫃),您將不得不使用加密狗進行簽名。
  3. 現在,右鍵單擊該項目,並挑選Properties
  4. PropertiesSigning並確認您選擇了 正確的證書。如果你跳過這一步,應用程序將不會安裝 。
  5. 仍在裏面Properties轉到Publish並確保將 設置爲您的發佈位置和安裝文件夾。我使用Amazon S3 作爲安裝文件夾。
  6. 點擊Publish Now。它會要求你再次簽名。

現在,你會認爲在這一點上你會完成...但你不是。

  1. 所以你下一步需要的是一個.p12證書。我聯繫了 DigiCert的支持,他們能夠免費給我一個(因爲我有這麼多問題,因此只有一年的問題 )。這是不同於EV證書的 。
  2. 後你有.p12證書和EV,我運行批處理 程序,其中兩次(一次帶有.p12然後 與EV再次)簽署的setup.exe文件,並推到Amazon S3。

這是我的SignDeploy.bat文件:

echo off 
cls 
echo Signing setup.exe with .p12 Certificate File 
"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /f [LOCATION OF P12 FILE] /p [PASSWORD] [LOCATION OF SETUP.EXE] 
pause 
echo Signing setup.exe with EV Certificate from Store 
"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 [EV HASH FROM DIGICERT] [LOCATION OF SETUP.EXE] 
pause 
echo Dry run on syncing files up to S3 
aws s3 sync [LOCAL DEPLOYMENT FOLDER] [S3 BUCKET AND FOLDER LOCATION] --acl public-read --dryrun 
echo   
echo If that worked, it's time to send them up for real. 
echo Control-C to stop now, or... 
pause 
aws s3 sync [LOCAL DEPLOYMENT FOLDER] [S3 BUCKET AND FOLDER LOCATION] --acl public-read 
pause 

畢竟這(我想你最終輸入您的EV證書的密碼,共3次)誰從指定位置下載setup.exe(必須是同一個用戶如您的應用中所示)將能夠安裝並運行您的VSTO應用程序。

我們在客戶端的安裝過程中遇到了其他問題,但使用上述過程解決了簽名問題。

我不會假裝理解爲什麼需要簽署這麼多次,也沒有任何意義,這並不能從Visual Studio內部順利運行。 DigiCert試圖讓我使用Build Events來做到這一點,但它不起作用B/C這些進程在BUILD的任一側運行而不是在PUBLISH上運行。我們需要的是我認爲不存在的Publish Events

我已經探索了使用MsBuild.exe進行更長時間的更多參與命令行過程的想法,但很難這樣做Automatically increment revision with each release部件。

也許這裏有人有一個想法如何設置。我的過程還是有點手動的,但在這一點上它似乎可靠地工作,所以我不傾向於太多地混淆它。