如何產生測試憑證並利用SignTool工具進行程式碼簽章(Code Signing)

程式碼簽章(Code Signing)是一種虛擬的簽章,讓使用者下載後可以確保應用程式未被其他人篡改。我們將介紹如何產生測試憑證並利用Windows SDK中的SignTool工具進行簽章。

什麼是程式碼簽章

數位簽章是由軟體開發者用來簽署程式碼的數位憑證,內容包含簽署者、簽署日期、憑證到期日期等資訊。開發者對編譯好的程式進行簽章後開放給大眾使用,當程式被竄改數位簽章就會”消失”。我們從網路下載應用程式,可以利用數位簽章來驗證應用程式是否為該開法者發行並未被別人修改。例如下圖為Google Chrome應用程式的數位簽章資訊。

正式發布建議使用受信任的憑證機構(Certificate Authority,CA)發布的憑證來簽署,確保應用程式的公信力和安全性,但透過機構申請憑證需要經過複雜的審核流程及費用,因此測試的時候可以先自行產生憑證來簽署。

產生pfx憑證檔案

要先產生pfx的憑證檔案,後續才能利用這個憑證檔案進行簽署。

1.以系統管理員執行「Windows PowerShell ISE

2.在Windows PowerShell ISE視窗中點選新增

3.輸入以下指令來產生pfx憑證檔案。

下方欄位可以按照不同情境修改

PowerShell
$cert = New-SelfSignedCertificate -DnsName 簽署人名稱 -CertStoreLocation cert:\LocalMachine\My -type CodeSigning
$pwd = ConvertTo-SecureString -String 要產生的密碼 -Force -AsPlainText
Export-PfxCertificate -cert $cert -FilePath 輸出的pfx檔案位置 -Password $pwd

範例中會執行以下程式

PowerShell
$cert = New-SelfSignedCertificate -DnsName test.name.com -CertStoreLocation cert:\LocalMachine\My -type CodeSigning
$pwd = ConvertTo-SecureString -String "ooorito" -Force -AsPlainText
Export-PfxCertificate -cert $cert -FilePath D:\mycert.pfx -Password $pwd

3.執行完之後,就會在 D:\ 目錄下產生憑證檔案了~

安裝Windows SDK工具

因為要對exe簽署的signtool工具在Windows SDK裡面,所以要下載並安裝Windows SDK。

1.到https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/下載SDK安裝程式。

2.在安裝程式畫面中,點選Next

3.因為我們只需要使用SDK裡面的SignTool工具,所以在這個頁面只要選擇安裝「Windows SDK Signing Tools for Desktop Apps」這個元件就好。

4.安裝完畢後,SignTool的位置會在「C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64」資料夾中。

為應用程式進行簽署

我們產生完pfx憑證檔案及安裝完簽署的工具就可以為exe進行簽章了。

1.我們找一個測試用的exe進行簽署。以SignTest.exe當作範例,這個exe原本沒有數位簽章代表沒有簽署過。

2.接者開啟命令提示字元,利用剛才安裝的SignTool工具及使用我們產生的憑證檔,將要簽署的SignTest.exe進行簽章。signtool及exe的位置可以依照實際修改。

Console
"signtool.exe位置" sign /f "pfx檔案位置" /fd sha256 /t http://timestamp.comodoca.com/authenticode /p ooorito "要簽屬的exe位置"
引數描述
/f簽署憑證檔案位置。
/fd簽署演算法
/t時間戳記伺服器的 URL
/pPFX 檔案的密碼
signtool參數說明

範例中會執行下面指令。

Console
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe" sign /f "D:\mycert.pfx" /fd sha256 /t http://timestamp.comodoca.com/authenticode /p ooorito "D:\CodeSigningTest\SignTest.exe"

3.簽署完成後再看SignTest.exe的屬性就會有我們剛剛所簽署的簽章啦,簽署完成~~!!

結語

使用數位簽章後,可以表示應用程式沒有被別人竄改,但作業系統不會將自簽憑證視為可信任憑證,因此使用者在安裝時系統會提示安全性警告,若要避免這個警告就只能利用受信任的憑證機構來進行簽署了。

分享這篇文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *