コンテンツにスキップ
Tauri

Windows でのコード署名

アプリケーションを Microsoft Store に掲載し、ブラウザーからダウンロードしたときに「このアプリケーションは信頼されていないため起動できません」という SmartScreen 警告が表示されないようにするためには、Windows でのコード署名が必要です。

エンド・ユーザーが SmartScreen 警告を気にしないとか、ブラウザー経由でダウンロードしていない場合では、アプリケーションを Windows 上で実行するために Windows のコード署名は必要はありません。 この章では、「OV 証明書」(「組織検証 Organization Validation」証明書)と「Azure Key Vault」による署名について説明します。 もしあなたがここに記載されていない他の署名方式、たとえば「EV 証明書」(「拡張検証 Extended Validation」証明書)などを使用する場合は、証明書発行者の公式文書を確認し、下記の カスタム署名コマンド の項を参照してください。

《訳注》

デジタル証明書 インターネットでデータを暗号化して通信を行なうためのプロトコル(SSL/TSL)において用いられる「SSL サーバー証明書」。以下の三種類があります。

  • ドメイン検証 Domain Validation(DV)
  • 組織検証 Organization Validation(OV)
  • 拡張検証 Extended Valication(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 ファイルに変換します。〔《訳注》コマンド内のファイル名「cert.cer」「private-key.key」部分は自分の証明書/秘密鍵のファイル名に変更する必要があります。〕

    • エクスポート用パスワード入力を求めるメッセージが表示されるはずです。ここで入力したパスワードを忘れないでください!

    • つぎに、「.pfx ファイル」をインポートします。

    • $WINDOWS_PFX_PASSWORD = 'MYPASSWORD'」を使い上記の「エクスポート用パスワード」をこの変数に割り当てます〔《訳注》MYPASSWORD 部分に「エクスポート用パスワード」を入力〕。

    • そして、次のコマンド「Import-PfxCertificate -FilePath certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $WINDOWS_PFX_PASSWORD -Force -AsPlainText)」を使用して証明書をインポートします。

    • スタート・メニュー ➡️「certmgr.msc」と入力すると、「個人証明書マネージャー」が起動し、そこから「Personal/Certificates(個人/証明書)」を開きます。

    • 先ほどインポートした証明書を見つけてダブルクリックし、「Details(詳細)」タブをクリックします。

    • 署名ハッシュ・アルゴリズム(ハッシュ関数)は、Tauri 製?の「digestAlgorithm」になります。(ヒント: このアルゴリズムはおそらく sha256 関数です)

    • 「Thumbprint」までスクロールダウンしてください。「A1B1A2B2A3B3A4B4A5B5A6B6A7B7A8B8A9B9A0B0」のような値があるはずです。これが「certificateThumbprint(証明書の指紋)」です。

    • 「タイムスタンプ URL」も必要です。これは証明書の署名時刻を確認するためのタイムサーバーです。筆者の場合は「http://timestamp.comodoca.com」を使用していますが、証明書の取得元にもタイムスタンプ URL があるはずです。

  1. これで、certificateThumbprintdigestAlgorithmtimestampUrl が準備できたので、tauri.conf.json ファイルを開きます。

  2. tauri.conf.json ファイルでは、tauri -> bundle -> windows と辿って 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: アプリケーションのファイル・パスがここに表示されます

これは、.exe ファイルが正常に署名されたことを示しています。

以上で、Tauri アプリケーションが Windows 署名用に正常にセットアップできました。

GitHub Actions を使用してアプリケーションに署名するワークフローを作成することもできます。

GitHub Action を適切に設定するために、「GitHub シークレット」をいくつか追加する必要があります。このシークレットには任意の名前を付けることができます。

《訳注》

シークレット secrets: organization、リポジトリ、またはリポジトリ環境の GitHub Actions ワークフローで使うために作成する変数。〔GitHub Docs

  • GitHub シークレットを追加する方法については、GitHub Docs のシークレットの作成 ガイドをご覧ください。

使用する「シークレット」は次のとおりです:

GitHub シークレット変数の値
WINDOWS_CERTIFICATE「.pfx 証明書」の Base64 エンコード版は、次のコマンドを使用して生成できます: certutil -encode certificate.pfx base64cert.txt
WINDOWS_CERTIFICATE_PASSWORD「certificate.pfx」の作成時に使用する証明書エクスポート・パスワード
  1. ワークフローに、「証明書」を Windows 環境にインポートするためのステップを追加する必要があります。このワークフローでは、以下の処理が実行されます。

    1. 「GitHub シークレット」を環境変数に割り当て
    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 publish テンプレートを使用します。

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__ # このアクションは自動的に \_\_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. 保存して自分のリポジトリにプッシュします。

  2. これで、あなたのワークフローで Windows 証明書を GitHub ランナーにインポートできるようになり、自動コード署名が可能になります。

Azure Key Vault 証明書と資格情報を提示することで、Windows 実行可能ファイルに署名できます。

  1. Key Vault(キー・コンテナー/鍵保管庫)

Azure PortalKey vaults service に移動し、「Create(作成)」ボタンをクリックして新しい「Key Vault(キー・コンテナー)」を作成します。 「キー・コンテナー名」(Key Vault name)を覚えておいてください。「証明書 URL」の設定で登録が必要になります。

《訳注》

Key Vault キー・コンテナー。原意は「鍵の保管庫(キー・ヴォルト)」ですが、Microsoft 社の日本語サイト では「キー・コンテナー」と記載されていますので、その表記に倣います。

  1. Certificate(証明書)

「キー・コンテナー」を作成したら、そのキー・コンテナーを選択し、「オブジェクト Object > 証明書 Certificates」ページに移動して新しい証明書を作成し、「生成 Generate /インポート Import」ボタンをクリックします。 「証明書名」(Certificate name)は覚えておいてください。「証明書 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>(証明書名)の部分は前述の手順でメモした「適切な名前」に置き換える必要があることに注意してください。

署名時に Azure Key Vault の設定を使用するように Tauri を設定するには、bundle > windows > signCommand の設定値を変更します:

tauri.conf.json
{
"bundle": {
"windows": {
"signCommand": "relic sign --file %1 --key azure --config relic.conf"
}
}
}
  1. 資格情報 Credentials

relic では「証明書」を読み込むために Azure で認証を行なう必要があります。 「Azure portal」のランディング・ページで、「Microsoft Entra 管理センター」(旧称 Azure Active Directory)に移動し、サイド・メニューから「管理 Manage > アプリの登録 App registrations」ページに進みます。 「新規登録 New registration」をクリックして新しいアプリを作成します。アプリが作成されると「アプリケーションの詳細」ページにリダイレクトされ、そこで「アプリケーション(クライアント)ID」と「ディレクトリ(テナント)ID」を確認できます。 この二つの ID をそれぞれ環境変数の AZURE_CLIENT_IDAZURE_TENANT_ID に設定します。

サイド・メニューの「管理 Manage > 証明書とシークレット Certificates & secrets」で「新しいクライアント・シークレット New client secret」ボタンをクリックし、「値 Value」列の文字列を環境変数 AZURE_CLIENT_SECRET の値として設定します。

すべての資格情報を設定したら、「キー・コンテナー」のページに戻り、「アクセス制御(IAM)」ページに移動します。 新しく作成したアプリケーションに、「Key Vault 証明書ユーザー」および「Key Vault 暗号化ユーザー」というロールを割り当てる必要があります。

こうしたすべての変数を設定した後、tauri build を実行すると、署名された Windows インストーラーが生成されます。

上述の Azure Key Vault の項では、強力な Tauri Windows 署名設定を利用して、Tauri CLI が Windows インストーラー実行可能ファイルに署名する特別なシェル・コマンドを使用するようにしました。 「bundle > windows > signCommand 設定のオプションを用いると、Windows 実行可能ファイルに署名できる「コード署名ツール」ならどれでも利用できるようになります。

「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(信頼済み署名 CLI)をインストールし、環境変数を設定する必要があります。

    • cargo install trusted-signing-cli
    • trusted-signing-cli では、以下の環境変数を設定する必要があり、どの項目も「Github Actions シークレット」として追加することを忘れないでください:
      • AZURE_CLIENT_ID: アプリの登録 での「アプリケーション ID(クライアント ID)」です。
      • AZURE_CLIENT_SECRET: アプリの登録」での「クライアント・シークレット」値のことです。
      • AZURE_TENANT_ID: 「Azure ディレクトリ」の「テナント ID」のことです。これは、「アプリの登録」からも入手できます。
    • すでに作成済みの tauri.conf.json ファイルを修正するか、Windows 用の専用設定ファイルを作成します。「URL」と「証明書名」は自分のアプリ用の値に置き換えます。
      • -e: Azure コード署名アカウントのエンドポイント
      • -a: Azure コード署名アカウントの名前
      • -c: Azure コード署名アカウント内の証明書プロファイルの名前
      • -d: 署名されたコンテンツの説明(オプション)。「.msi インストーラー」に署名する場合は、この記載内容が「UAC プロンプト」にインストーラー名として表示されます。設定されていない場合は、ランダムな文字列が表示されます。
    《訳注》

    UAC プロンプト Windows の「ユーザー・アカウント制御(User Account Control)機能」が管理者権限を必要とする操作を実行する際に表示する確認画面。〔参考

    tauri.conf.json
    {
    "bundle": {
    "windows": {
    "signCommand": "trusted-signing-cli -e https://wus2.codesigning.azure.net -a MyAccount -c MyProfile -d MyApp %1"
    }
    }
    }

【※ この日本語版は、「Mar 3, 2025 英語版」に基づいています】


© 2025 Tauri Contributors. CC-BY / MIT