Windows 代码签名
Windows 上需要代码签名才能将您的应用程序列入 Microsoft Store,并防止从浏览器下载时出现 SmartScreen 警告,提示您的应用程序不受信任且无法启动。
在 Windows 上执行您的应用程序不是强制性的,只要您的最终用户可以忽略 SmartScreen 警告或您的用户不通过浏览器下载。本指南涵盖通过 OV(组织验证)证书和 Azure Key Vault 进行签名。如果您使用此处未记录的任何其他签名机制,例如 EV(扩展验证)证书,请查阅您的证书颁发者文档并参阅自定义签名命令部分。
- Windows - 您可以使用其他平台,但本教程使用 Powershell 原生功能。
- 一个可用的 Tauri 应用程序
- 代码签名证书 - 您可以在 Microsoft 文档中列出的服务上获取一个。该列表可能包含非 EV 证书的其他颁发机构,请自行比较并自行承担风险选择一个。- 请务必获取一个**代码签名**证书,SSL 证书不适用!
 
我们需要做一些事情来为 Windows 代码签名做准备。这包括将我们的证书转换为特定格式、安装此证书以及从证书中解码所需信息。
- 
- 
您将需要以下内容 - 证书文件(我的文件是 cert.cer)
- 私钥文件(我的文件是 private-key.key)
 
- 证书文件(我的文件是 
- 
打开命令提示符并使用 cd Documents/Certs切换到当前目录
- 
使用 openssl pkcs12 -export -in cert.cer -inkey private-key.key -out certificate.pfx将您的.cer转换为.pfx
- 
您应该会收到提示,要求输入导出密码 **不要忘记它!** 
 
- 
- 
- 
现在我们需要导入我们的 .pfx文件。
- 
使用 $WINDOWS_PFX_PASSWORD = 'MYPASSWORD'将您的导出密码分配给变量。
- 
现在使用 Import-PfxCertificate -FilePath certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $WINDOWS_PFX_PASSWORD -Force -AsPlainText)导入证书
 
- 
- 
- 
启动 ➡️ certmgr.msc打开个人证书管理,然后打开“个人/证书”。
- 
找到我们刚刚导入的证书并双击它,然后单击“详细信息”选项卡。 
- 
签名哈希算法将是我们的 digestAlgorithm。(提示:这很可能是sha256)
- 
向下滚动到指纹。应该有一个值,例如 A1B1A2B2A3B3A4B4A5B5A6B6A7B7A8B8A9B9A0B0。这是我们的certificateThumbprint。
- 
我们还需要一个时间戳 URL;这是一个用于验证证书签名时间的时钟服务器。我正在使用 http://timestamp.comodoca.com,但您获取证书的机构也可能有一个。
 
- 
- 
现在我们有了 certificateThumbprint、digestAlgorithm和timestampUrl,我们将打开tauri.conf.json。
- 
在 tauri.conf.json中,您将查找tauri->bundle->windows部分。有三个变量用于我们已捕获的信息。按照以下方式填写:
"windows": {        "certificateThumbprint": "A1B1A2B2A3B3A4B4A5B5A6B6A7B7A8B8A9B9A0B0",        "digestAlgorithm": "sha256",        "timestampUrl": "http://timestamp.comodoca.com"}- 
保存并运行 tauri build
- 
在控制台输出中,您应该会看到以下输出。 
info: signing appinfo: 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 密钥以正确配置 GitHub Action。这些密钥可以随意命名。
- 您可以查看有关如何添加 GitHub 密钥的加密密钥指南。
我们使用的密钥如下
| GitHub Secrets | 变量值 | 
|---|---|
| WINDOWS_CERTIFICATE | 您的 .pfx 证书的 Base64 编码版本,可以使用此命令完成: certutil -encode certificate.pfx base64cert.txt | 
| WINDOWS_CERTIFICATE_PASSWORD | 创建证书 .pfx 时使用的证书导出密码 | 
- 
我们需要在工作流中添加一个步骤,以将证书导入到 Windows 环境中。此工作流完成以下任务: - 将 GitHub Secrets 分配给环境变量
- 创建新的 certificate目录
- 将 WINDOWS_CERTIFICATE导入到 tempCert.txt
- 使用 certutil将 tempCert.txt 从 base64 解码为.pfx文件。
- 删除 tempCert.txt
- 将 .pfx文件导入到 Windows 的证书存储中,并将WINDOWS_CERTIFICATE_PASSWORD转换为安全字符串,以便在导入命令中使用。
 
- 
我们将使用 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- 在 -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)- 
保存并推送到您的仓库。 
- 
您的工作流现在可以导入 Windows 证书并将其导入到 GitHub runner 中,从而实现自动化代码签名! 
您可以通过提供 Azure Key Vault 证书和凭据来签署 Windows 可执行文件。
- 密钥保管库
在 Azure 门户中,导航到 密钥保管库服务,通过单击“创建”按钮创建一个新密钥保管库。请记住“密钥保管库名称”,因为您将需要该信息来配置证书 URL。
- 证书
创建密钥保管库后,选择它并转到“对象 > 证书”页面,然后单击“生成/导入”按钮以创建新证书。请记住“证书名称”,因为您将需要该信息来配置证书 URL。
- Tauri 配置
relic 使用配置文件来确定应使用哪个签名密钥。对于 Azure Key Vault,您还需要证书 URL。在 src-tauri 文件夹中创建一个 relic.conf 文件,并将 relic 配置为使用您的证书
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 配置值
{  "bundle": {    "windows": {      "signCommand": "relic sign --file %1 --key azure --config relic.conf"    }  }}- 凭据
relic 必须使用 Azure 进行身份验证才能加载证书。在 Azure 门户登录页面,转到“Microsoft Entra ID”服务,然后进入“管理 > 应用注册”页面。点击“新建注册”创建新应用。创建应用后,您将被重定向到应用程序详细信息页面,在那里您可以看到“应用程序(客户端)ID”和“目录(租户)ID”值。将这些 ID 分别设置为 AZURE_CLIENT_ID 和 AZURE_TENANT_ID 环境变量。
在“管理 > 证书和密钥”页面中,单击“新建客户端密钥”按钮,并将“值”列中的文本设置为 AZURE_CLIENT_SECRET 环境变量。
设置所有凭据后,返回密钥保管库页面并导航到“访问控制 (IAM)”页面。您必须为新创建的应用程序分配“密钥保管库证书用户”和“密钥保管库加密用户”角色。
设置所有这些变量后,运行 tauri build 将生成已签名的 Windows 安装程序!
在上面的Azure Key Vault文档中,我们使用了一个强大的 Tauri Windows 签名配置,强制 Tauri CLI 使用特殊的 shell 命令来签署 Windows 安装程序可执行文件。bundle > windows > signCommand配置选项可用于使用任何可以签署 Windows 可执行文件的代码签名工具。
您可以通过提供 Azure 代码签名证书和凭据来签署 Windows 可执行文件。如果您还没有 Azure 代码签名帐户,可以按照此教程进行操作。
如果您想使用 Github Actions 进行签名,则所有内容都应该已安装。
您需要安装 trusted-signing-cli 并配置您的环境变量。
- 
- cargo install trusted-signing-cli
 
- 
- 
您可以修改您的 tauri.conf.json,或者您可以为 Windows 创建一个特定的配置文件。将 URL 和证书名称替换为您自己的值。- -e:您的 Azure 代码签名帐户的端点
- -a:您的 Azure 代码签名帐户的名称
- -c:您的 Azure 代码签名帐户中证书配置文件的名称
- -d:已签名内容的描述(可选)。当签署 .msi 安装程序时,此描述将作为安装程序名称出现在 UAC 提示中,如果未设置,则为随机字符串。
 
 tauri.conf.json {"bundle": {"windows": {"signCommand": "trusted-signing-cli -e https://wus2.codesigning.azure.net -a MyAccount -c MyProfile -d MyApp %1"}}}
- 
© 2025 Tauri 贡献者。CC-BY / MIT