跳到主要內容
Tauri

Windows 代碼簽署

在 Windows 上,代碼簽署是必要的,以便讓您的應用程式能列在 Microsoft Store 中,並防止從瀏覽器下載時出現 SmartScreen 警告,指出您的應用程式不受信任且無法啟動。

在 Windows 上執行您的應用程式並非必要進行代碼簽署,只要您的最終使用者可以接受忽略 SmartScreen 警告,或者您的使用者不是透過瀏覽器下載即可。本指南涵蓋透過 OV(組織驗證)憑證和 Azure Key Vault 進行簽署。如果您使用此處未記錄的其他簽署機制,例如 EV(擴展驗證)憑證,請查閱您的憑證發行者文件,並參考自訂簽署命令章節。

OV 憑證

先決條件

  • Windows - 您可能可以使用其他平台,但本教學課程使用 PowerShell 原生功能。
  • 一個可運作的 Tauri 應用程式
  • 代碼簽署憑證 - 您可以在 Microsoft 文件中列出的服務上取得這些憑證之一。可能還有比該列表中包含的非 EV 憑證更多的授權單位,請自行比較並自行承擔風險選擇一個。
    • 請務必取得 代碼簽署 憑證,SSL 憑證不適用!

開始使用

為了讓 Windows 準備好進行代碼簽署,我們需要做一些事情。這包括將我們的憑證轉換為特定格式、安裝此憑證,以及從憑證中解碼必要的資訊。

  1. 將您的 .cer 轉換為 .pfx

    • 您將需要以下項目

      • 憑證檔案(我的檔案是 cert.cer
      • 私密金鑰檔案(我的檔案是 private-key.key
    • 開啟命令提示字元,並使用 cd Documents/Certs 切換到您目前的目錄

    • 使用 openssl pkcs12 -export -in cert.cer -inkey private-key.key -out certificate.pfx 將您的 .cer 轉換為 .pfx

    • 系統應提示您輸入匯出密碼, 請務必記住!

  2. 將您的 .pfx 檔案匯入金鑰儲存區。

    • 我們現在需要匯入我們的 .pfx 檔案。

    • 使用 $WINDOWS_PFX_PASSWORD = 'MYPASSWORD' 將您的匯出密碼指派給變數

    • 現在使用 Import-PfxCertificate -FilePath certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $WINDOWS_PFX_PASSWORD -Force -AsPlainText) 匯入憑證

  3. 準備變數

    • 開始 ➡️ certmgr.msc 以開啟個人憑證管理,然後開啟「個人/憑證」。

    • 找到我們剛剛匯入的憑證並按兩下,然後按一下「詳細資料」索引標籤。

    • 簽章雜湊演算法將會是我們的 digestAlgorithm。(提示:這很可能是 sha256

    • 向下捲動到「指紋」。應該會有一個像 A1B1A2B2A3B3A4B4A5B5A6B6A7B7A8B8A9B9A0B0 的值。這是我們的 certificateThumbprint

    • 我們還需要時間戳記 URL;這是一個時間伺服器,用於驗證憑證簽署的時間。我使用的是 http://timestamp.comodoca.com,但無論您從誰那裡取得憑證,他們可能也有一個。

準備 tauri.conf.json 檔案

  1. 現在我們有了 certificateThumbprintdigestAlgorithmtimestampUrl,我們將開啟 tauri.conf.json

  2. tauri.conf.json 中,您將尋找 tauri -> bundle -> windows 區段。我們捕獲的資訊有三個變數。如下所示填寫。

"windows": {
"certificateThumbprint": "A1B1A2B2A3B3A4B4A5B5A6B6A7B7A8B8A9B9A0B0",
"digestAlgorithm": "sha256",
"timestampUrl": "http://timestamp.comodoca.com"
}
  1. 儲存並執行 tauri build

  2. 在主控台輸出中,您應該會看到以下輸出。

info: signing app
info: running signtool "C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.19041.0\\x64\\signtool.exe"
info: "Done Adding Additional Store\r\nSuccessfully signed: APPLICATION FILE PATH HERE

這表示您已成功簽署 .exe

就是這樣!您已成功設定您的 Tauri 應用程式以進行 Windows 簽署。

使用 GitHub Actions 簽署您的應用程式。

我們也可以建立工作流程,以使用 GitHub Actions 簽署應用程式。

GitHub Secrets

我們需要新增一些 GitHub secrets,以正確設定 GitHub Action。這些可以隨您喜好命名。

  • 您可以檢視 加密 secrets 指南,了解如何新增 GitHub secrets。

我們使用的 secrets 如下

GitHub Secrets變數的值
WINDOWS_CERTIFICATE您的 .pfx 憑證的 Base64 編碼版本,可以使用此命令完成:certutil -encode certificate.pfx base64cert.txt
WINDOWS_CERTIFICATE_PASSWORD憑證匯出密碼,用於建立憑證 .pfx

工作流程修改

  1. 我們需要在工作流程中新增一個步驟,將憑證匯入 Windows 環境。此工作流程完成以下操作

    1. 將 GitHub secrets 指派給環境變數
    2. 建立新的 certificate 目錄
    3. WINDOWS_CERTIFICATE 匯入 tempCert.txt
    4. 使用 certutil 將 tempCert.txt 從 base64 解碼為 .pfx 檔案。
    5. 移除 tempCert.txt
    6. .pfx 檔案匯入 Windows 的憑證儲存區,並將 WINDOWS_CERTIFICATE_PASSWORD 轉換為安全字串,以在匯入命令中使用。
  2. 我們將使用 tauri-action 發佈範本

name: 'publish'
on:
push:
branches:
- release
jobs:
publish-tauri:
strategy:
fail-fast: false
matrix:
platform: [macos-latest, ubuntu-latest, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v2
- name: setup node
uses: actions/setup-node@v1
with:
node-version: 12
- name: install Rust stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: install webkit2gtk (ubuntu only)
if: matrix.platform == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y webkit2gtk-4.0
- name: install app dependencies and build it
run: yarn && yarn build
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version
releaseName: 'App v__VERSION__'
releaseBody: 'See the assets to download this version and install.'
releaseDraft: true
prerelease: false
  1. -name: install app dependencies and build it 正上方,您會想要新增以下步驟
- name: import windows certificate
if: matrix.platform == 'windows-latest'
env:
WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }}
WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
run: |
New-Item -ItemType directory -Path certificate
Set-Content -Path certificate/tempCert.txt -Value $env:WINDOWS_CERTIFICATE
certutil -decode certificate/tempCert.txt certificate/certificate.pfx
Remove-Item -path certificate -include tempCert.txt
Import-PfxCertificate -FilePath certificate/certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -Force -AsPlainText)
  1. 儲存並推送至您的 repo。

  2. 您的工作流程現在可以匯入您的 Windows 憑證並將其匯入 GitHub runner,從而實現自動代碼簽署!

Azure Key Vault

您可以透過提供 Azure Key Vault 憑證和憑證來簽署 Windows 可執行檔。

  1. Key Vault

Azure Portal 中,導覽至 Key vaults 服務,然後按一下「建立」按鈕來建立新的金鑰儲存區。請記住「金鑰儲存區名稱」,因為您將需要該資訊來設定憑證 URL。

  1. 憑證

建立金鑰儲存區後,選取它並前往「物件 > 憑證」頁面以建立新憑證,然後按一下「產生/匯入」按鈕。請記住「憑證名稱」,因為您將需要該資訊來設定憑證 URL。

  1. Tauri 設定

relic 使用設定檔來判斷應使用哪個簽署金鑰。對於 Azure Key Vault,您也需要憑證 URL。在 src-tauri 資料夾中建立 relic.conf 檔案,並設定 relic 以使用您的憑證

src-tauri/relic.conf
tokens:
azure:
type: azure
keys:
azure:
token: azure
id: https://\<KEY_VAULT_NAME\>.vault.azure.net/certificates/\<CERTIFICATE_NAME\>

請注意,您必須將 <KEY_VAULT_NAME> 和 <CERTIFICATE_NAME> 替換為先前步驟中的適當名稱。

若要設定 Tauri 以使用您的 Azure Key Vault 設定進行簽署,請變更 bundle > windows > signCommand 設定值

tauri.conf.json
{
"bundle": {
"windows": {
"signCommand": "relic sign --file %1 --key azure --config relic.conf"
}
}
}
  1. 憑證

relic 必須使用 Azure 進行驗證才能載入憑證。在 Azure portal 登陸頁面中,前往「Microsoft Entra ID」服務,然後前往「管理 > 應用程式註冊」頁面。按一下「新增註冊」以建立新的應用程式。建立應用程式後,您會重新導向至應用程式詳細資料頁面,您可以在其中看到「應用程式 (用戶端) 識別碼」和「目錄 (租用戶) 識別碼」值。將這些識別碼分別設定為 AZURE_CLIENT_IDAZURE_TENANT_ID 環境變數。

在「管理 > 憑證 & secrets」頁面中,按一下「新增用戶端密碼」按鈕,並將「值」欄中的文字設定為 AZURE_CLIENT_SECRET 環境變數。

設定完所有憑證後,返回您的金鑰儲存區頁面,並導覽至「存取控制 (IAM)」頁面。您必須將「金鑰儲存區憑證使用者」和「金鑰儲存區密碼編譯使用者」角色指派給您新建立的應用程式。

設定完所有這些變數後,執行 tauri build 將會產生已簽署的 Windows 安裝程式!

自訂簽署命令

在上面的 Azure Key Vault 文件中,我們使用了強大的 Tauri Windows 簽署設定,以強制 Tauri CLI 使用特殊的 shell 命令來簽署 Windows 安裝程式可執行檔。bundle > windows > signCommand 設定選項可用於使用任何可以簽署 Windows 可執行檔的代碼簽署工具。

Azure 代碼簽署

您可以透過提供 Azure Code signing 憑證和憑證來簽署 Windows 可執行檔。如果您還沒有 Azure Code signing 帳戶,您可以按照此教學課程進行操作。

先決條件

如果您想使用 Github Actions 進行簽署,則應安裝所有項目。

  1. Trusted Signing Account 和已設定的權限
  2. .NET(建議使用 .NET 6 或更新版本)
  3. Azure CLI
  4. Signtool(建議使用 Windows 11 SDK 10.0.22000.0 或更新版本)

開始使用

您需要安裝 trusted-signing-cli 並設定您的環境變數。

  1. 安裝 trusted-signing-cli

    • cargo install trusted-signing-cli
  2. 設定環境變數

    • trusted-signing-cli 需要設定以下環境變數,別忘了將這些新增為 Github Actions secrets

  3. 修改您的 tauri.conf.json 檔案

    • 您可以修改您的 tauri.conf.json,也可以為 Windows 建立特定的設定檔。將 URL 和憑證名稱替換為您自己的值。

      • -e:您的 Azure Code Signing 帳戶的端點
      • -a:您的 Azure Code Signing 帳戶的名稱
      • -c:您的 Azure Code Signing 帳戶內的憑證設定檔名稱
    tauri.conf.json
    {
    "bundle": {
    "windows": {
    "signCommand": "trusted-signing-cli -e https://wus2.codesigning.azure.net -a MyAccount -c MyProfile %1"
    }
    }
    }

© 2025 Tauri Contributors. CC-BY / MIT