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 があるはずです。
-
-
これで、
certificateThumbprint、digestAlgorithm、timestampUrlが準備できたので、tauri.conf.jsonファイルを開きます。 -
tauri.conf.jsonファイルでは、tauri->bundle->windowsと辿って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: アプリケーションのファイル・パスがここに表示されますこれは、.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」の作成時に使用する証明書エクスポート・パスワード |
-
ワークフローに、「証明書」を Windows 環境にインポートするためのステップを追加する必要があります。このワークフローでは、以下の処理が実行されます。
- 「GitHub シークレット」を環境変数に割り当て
- 新しい
certificateディレクトリの作成 WINDOWS_CERTIFICATEを「tempCert.txt」にインポートcertutilコマンドを使用して「tempCert.txt」を base64 から.pfxファイルにデコード- 「tempCert.txt」を削除
.pfxファイルを Windows レジストリ内の「証明書ストア」(証明書格納エリア)へインポートしWINDOWS_CERTIFICATE_PASSWORDを安全な文字列へ変換後、その文字列をインポート・コマンドで利用
-
tauri-actionpublish テンプレートを使用します。
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-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 ランナーにインポートできるようになり、自動コード署名が可能になります。
Azure Key Vault 証明書と資格情報を提示することで、Windows 実行可能ファイルに署名できます。
- Key Vault(キー・コンテナー/鍵保管庫)
Azure Portal で Key vaults service に移動し、「Create(作成)」ボタンをクリックして新しい「Key Vault(キー・コンテナー)」を作成します。 「キー・コンテナー名」(Key Vault name)を覚えておいてください。「証明書 URL」の設定で登録が必要になります。
Key Vault キー・コンテナー。原意は「鍵の保管庫(キー・ヴォルト)」ですが、Microsoft 社の日本語サイト では「キー・コンテナー」と記載されていますので、その表記に倣います。
- Certificate(証明書)
「キー・コンテナー」を作成したら、そのキー・コンテナーを選択し、「オブジェクト Object > 証明書 Certificates」ページに移動して新しい証明書を作成し、「生成 Generate /インポート Import」ボタンをクリックします。 「証明書名」(Certificate name)は覚えておいてください。「証明書 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>(証明書名)の部分は前述の手順でメモした「適切な名前」に置き換える必要があることに注意してください。
署名時に Azure Key Vault の設定を使用するように Tauri を設定するには、bundle > windows > signCommand の設定値を変更します:
{ "bundle": { "windows": { "signCommand": "relic sign --file %1 --key azure --config relic.conf" } }}- 資格情報 Credentials
relic では「証明書」を読み込むために Azure で認証を行なう必要があります。
「Azure portal」のランディング・ページで、「Microsoft Entra 管理センター」(旧称 Azure Active Directory)に移動し、サイド・メニューから「管理 Manage > アプリの登録 App registrations」ページに進みます。
「新規登録 New registration」をクリックして新しいアプリを作成します。アプリが作成されると「アプリケーションの詳細」ページにリダイレクトされ、そこで「アプリケーション(クライアント)ID」と「ディレクトリ(テナント)ID」を確認できます。
この二つの ID をそれぞれ環境変数の AZURE_CLIENT_ID と AZURE_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 で署名を行なう場合は、以下のすべてをインストールする必要があります。
- 信頼済み署名アカウント および アクセス権限が設定されていること
- .NET (.NET 6 またはそれ以降を推奨)
- Azure CLI
- Signtool(署名ツール) (Windows 11 SDK 10.0.22000.0 またはそれ以降を推奨)
trusted-signing-cli(信頼済み署名 CLI)をインストールし、環境変数を設定する必要があります。
-
cargo install trusted-signing-cli
-
- すでに作成済みの
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