Windows環境中,為自己的應用新增發行者證書

Gold_stein發表於2024-10-20

Windows環境中,為自己的應用新增發行者證書

在 Windows 上,如果你執行一個自定義構建的 Go 應用,Windows SmartScreen 或 UAC 可能會顯示“發行者為未知”,這是因為你的應用沒有經過程式碼簽名認證。為了讓 Windows 識別你的發行者資訊,你需要給應用新增程式碼簽名(Code Signing Certificate)


如何為 Go 應用新增發行者資訊(程式碼簽名)

步驟 1:獲取程式碼簽名證書

你需要一個 程式碼簽名證書 來給你的應用簽名。這些證書由可信證書頒發機構(CA)提供,如:

  • DigiCert
  • Sectigo (Comodo)
  • GlobalSign
  • Let's Encrypt(免費 TLS 證書,但程式碼簽名證書需要商業購買)

如果只是測試使用,你也可以生成一個自簽名證書(詳見下方步驟),但這不會被 Windows 視為可信任發行者。


步驟 2:生成自簽名證書(測試用)

如果只是本地測試或學習目的,可以生成自簽名證書:

  1. 開啟 PowerShell(管理員許可權)。

  2. 執行以下命令建立一個自簽名證書:

    $cert = New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=MyCompany" -CertStoreLocation "Cert:\CurrentUser\My"
    
  3. 匯出證書為 .pfx 檔案(包括私鑰):

    Export-PfxCertificate -Cert "Cert:\CurrentUser\My\$($cert.Thumbprint)" -FilePath "C:\path\to\mycert.pfx" -Password (ConvertTo-SecureString -String "your-password" -Force -AsPlainText)
    

這會生成一個自簽名的 .pfx 檔案,稍後會用來簽名你的可執行檔案。


步驟 3:安裝 signtool 工具

signtool 是 Windows SDK 中的工具,用於給可執行檔案和安裝包簽名。

  1. 安裝 Windows SDK下載地址)。
  2. 在終端中確保 signtool 可用:
    signtool
    
    如果顯示幫助資訊,則說明安裝成功。

步驟 4:給可執行檔案簽名

  1. 構建你的 Go 可執行檔案:

    go build -o myapp.exe main.go
    
  2. 使用 signtool 給應用簽名:

    signtool sign /f C:\path\to\mycert.pfx /p your-password /tr http://timestamp.digicert.com /td sha256 /fd sha256 myapp.exe
    
    • /f:證書檔案路徑(.pfx)。
    • /p:證書檔案密碼。
    • /tr:時間戳伺服器(避免簽名過期)。
    • /td/fd:使用 SHA-256 演算法。
    • myapp.exe:要簽名的可執行檔案。
  3. 驗證簽名是否成功:

    signtool verify /pa myapp.exe
    

步驟 5:檢查簽名和發行者資訊

  1. 右鍵點選已簽名的 myapp.exe
  2. 選擇 屬性 > 數字簽名
  3. 確認簽名是否成功,發行者是否顯示為你指定的名稱(如 CN=MyCompany)。

步驟 6:釋出和避免未知發行者提示

  • 釋出前測試:確保在不同的 Windows 裝置上測試你的應用簽名,檢查是否顯示發行者資訊。
  • 購買可信證書:自簽名證書只能用於本地測試。如果要避免 Windows 警告,必須從可信的證書頒發機構(CA)購買程式碼簽名證書。

總結

透過給你的 Go 應用新增程式碼簽名證書,Windows 系統就能識別你的應用的發行者資訊,避免“未知發行者”的提示。你可以使用 自簽名證書來測試,但在生產環境下,需要購買可信證書來確保你的使用者不會看到安全警告。

相關文章