跳到内容
Tauri

Windows 签名

在 Windows 上,签名是必须的,这样可以让您的应用在 Microsoft Store 上列出,并且防止下载时浏览器显示的不受限和安全警告。

只要最终用户愿意忽略 Microsoft SmartScreen 警告或用户不是通过浏览器下载,Windows 系统上执行您的应用就不需要签名。本指南涵盖通过 OV (组织验证)证书和 Azure 密钥保管库进行签名。如果您使用未在此文档中记录的其他签名机制,例如 EV (扩展验证)证书,请查阅您的证书颁发者文档,并参考自定义签名命令部分。

OV 证书

先决条件

  • Windows - 您可能可以使用其他平台,但本教程使用 PowerShell 本地功能。
  • 一个工作的 Tauri 应用程序
  • 代码签名证书 - 您可以在 Microsoft 文档中列出的一些服务上获得其中一个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

好了!您已成功为Windows签名设置了Tauri应用程序。

使用 GitHub Actions 对您的应用进行签名。

我们还可以创建一个工作流程,使用GitHub动作来签发应用程序。

GitHub Secrets

我们需要添加几个GitHub secrets以便正确配置GitHub动作。这些可以命名为任何您喜欢的名称。

我们使用的机密如下

GitHub Secrets变量值
WindowText 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: 安装应用依赖项并构建它 的上方,您需要添加以下步骤
- 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. 保存并推送到您的仓库。

  2. 现在,您的流程可以导入您的 Windows 证书并将其导入 GitHub Runner,以实现自动化代码签名!

Azure 密钥保管库

您可以通过提供 Azure Key Vault 证书和凭据来签署 Windows 可执行文件。

  1. 密钥保管库

Azure Portal 中,导航到 密钥保管库服务 并点击“创建”按钮以创建一个新的密钥保管库。记住“密钥保管库名称”,因为您需要这些信息来配置证书 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”服务并转到“管理 > 应用程序注册”页面。点击“新注册”以创建新应用。创建应用后,您将被重定向到应用程序详情页面,其中您可以查看“应用程序(客户端)ID”和“目录(租户)ID”值。将这些 ID 设置为 AZURE_VAULT_IDAZURE_TENANT_ID 环境变量。

在“管理 > 证书和秘密”页面,单击“新客户端秘密”按钮,并将“值”列中的文本设置为 AZURE_CLIENT_SECRET 环境变量。

设置所有凭据后,返回到密钥保管库的页面,并导航到“访问控制(IAM)”页面。您必须将“密钥保管库证书用户”和“密钥保管库加密用户”角色分配给您新创建的应用程序。

设置所有这些变量后,运行 tauri build 将生成已签名的 Windows 安装程序!

自定义签名命令

如上所述的 Azure Key Vault 文档中,我们使用了一个强大的 Tauri Windows 签名配置,强制 Tauri CLI 使用一个特殊的壳命令来签署 Windows 安装程序可执行文件。可以使用 bundle > windows > signCommand 配置选项来使用任何可以签名 Windows 可执行文件的 codesign 工具。

Azure 签名

您可以通过提供Azure代码签名证书和凭据来签名Windows可执行文件。如果您还没有Azure代码签名账户,可以按照这个教程操作。

先决条件

如果您想使用Github Actions进行签名,所有内容都应已安装。

  1. 已配置可信签名账户和权限
  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 密钥添加

      • AZURE_CLIENT_ID:您的应用注册的客户端ID
      • AZURE_CLIENT_SECRET:您的应用注册的客户端密钥
      • AZURE_TENANT_ID:您的Azure目录的租户ID,您也可以从您的应用注册中获取这个信息
  3. 修改您的tauri.conf.json文件

    • 您可以修改您的tauri.conf.json,或者您可以创建一个针对Windows的特定配置文件。用您自己的值替换URL和证书名称。

      • -e:您的Azure代码签名账户的终点
      • -a:您的Azure代码签名账户的名称
      • -c:您的Azure代码签名账户内的证书配置文件的名称
    tauri.conf.json
    {
    "bundle": {
    "windows": {
    "signCommand": "trusted-signing-cli -e https://wus2.codesigning.azure.net -a MyAccount -c MyProfile %1"
    }
    }
    }

© 2025 Tauri贡献者。CC-BY / MIT