前面兩篇淺談了 Code Signing 與 EV Code Signing,但無論何者基本上都需要以公司的名義才可申請、購買。那若單純想要以個人的名義發行軟體就顯得相當麻煩。但事實上,中華民國18歲以上的公民,都可以申請一張自然人憑證,而內政部所發給的憑證是受 Windows 認可的,也就是說這張憑證也可作為簽章依據!以下就來詳細介紹如何利用自然人憑證完成這個簽署動作。
1. 將自然人憑證註冊至電腦
可至內政部憑證管理中心下載 HiCOS 卡片管理工具,並依據下列步驟將憑證註冊至電腦。
註冊成功會出現以下畫面:
若要瀏覽或刪除電腦中曾經註冊的憑證,可參考「如何刪除安裝在電腦中的管理憑證」。
2. 進行程式碼簽章作業
先利用 Visual Studio 的介面簡單的介紹一下現在的簽章環境。為什麼說是「先」呢,因為無論 Visual Studio 2015 或 2017,我都無法在上頭成功完成自然人憑證簽署的作業。須仰賴其他方式。
在 Visual Studio 的專案屬性中,可以看到以下畫面:
- Select from Store...
也就是使用上述電腦中已註冊的憑證進行簽章作業,自然人憑證就是選用這項。 - Select from File...
藉由「憑證檔(*.pfx)」進行簽署作業。某些憑證不像自然人憑證具有實體卡片而是以一個 pfx 檔代替,例如金融憑證或是向各大廠商購買的 Code Signing。 - Create Test Certificate...
產生一個測試用的憑證。這個憑證相當於你自己發行的,當然不被 Windows 給認可,純粹測試用。 - Timestamp server URL
這就是在上一篇提過的時間戳記啦~。
OK,簡單介紹就到這邊。理論上將「Sign the ClickOnce manifests」給勾選,在程式編譯時,應該會自動幫我把設定好的憑證給簽署上檔案。但...當選擇對象為自然人憑證後,他只吐出了一句「internal error」...。
經過一番搜尋,發現直接使用 SignTool 可以完成簽署的作業!SignTool 的詳細使用方式可以參考官方文件。這邊就很簡單的分享我使用的指令,方便大家即摳即用。XD
首先,當然是先找到 SignTool.exe 的所在位置,我的是在 C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool
。接著就是用 command line (命令提示字元)進行以下操作。
必須再次提醒的是時間戳記的部份,上一篇提過,若是沒有時間戳記的簽章,是真的會「過期」的。要蓋上時間戳記,必須先找到一個 Time Stamping Server,這邊分享一個我找到的:http://timestamp.comodoca.com。
在我的環境下,是直接讓 Code Sign 自動選取「最佳」(/a)的憑證即可使用自然人憑證進行簽章:signtool.exe sign /a /tr http://timestamp.comodoca.com "xxx.exe"
。此時會跳出一個要求輸入憑證密碼的視窗,輸入後隨即出現成功訊息,完成簽署。
Successfully signed: xxx.exe
就這樣!大功告成!!