このガイドでは、ローカル テストから運用配布まで、開発の各段階で MSIX パッケージに署名する手順について説明します。 署名オプションとコストの比較については、「 MSIX パッケージの署名の概要」を参照してください。
署名方法を選択する
| Stage | 推奨される方法 | Windows バージョン |
|---|---|---|
| ローカルでの開発とテスト | WinApp CLI (自己署名証明書) | Windows 10以降 |
| テスターへの配布 (サイドローディング) | 証明書信頼ステップを使用した自己署名証明書 | Windows 10以降 |
| 製品の配布 | Azure Artifact Signing (以前の名称: 信頼された署名) | Windows 10 バージョン 1809 以降、Windows Server 2016 以降 |
| Microsoft Storeディストリビューション | ストアが提出時に署名済み | サポートされているすべてのWindowsバージョン |
開発: ローカルテストのために署名する
ローカル開発の場合は、自己署名証明書を使用します。 自己署名パッケージは、証明書が明示的に信頼されているマシンにのみインストールできます。これは意図的であり、テストに適しています。
オプション A: WinApp CLI (新しいプロジェクトに推奨)
Important
Windows アプリ開発 CLI は現在、パブリック プレビューであり、Windows 10 にWinGetがインストールされている必要があります。
WinApp CLI は、証明書の生成と署名を 1 つの手順で処理します。
手順 1: WinApp CLI をインストールする
winget install -e --id Microsoft.WinAppCLI --source winget
手順 2: 自己署名開発証明書を生成する
winapp cert generate --manifest .\appxmanifest.xml --output .\devcert.pfx --install
--manifest フラグは、appxmanifest.xmlからパブリッシャー名を直接読み取ります。
--install フラグは、ローカル コンピューター信頼ストアに証明書を追加するため、すぐにパッケージをインストールできます。
手順 3: パッケージに署名する
winapp sign MyApp.msix --cert .\devcert.pfx
オプション B: PowerShell + SignTool (Windows 10 以降)
WinApp CLI を使用していない場合は、この方法を使用します。
手順 1: 自己署名証明書を作成する
管理者特権の PowerShell プロンプトで次を実行します。
Subject 値は、Publisher 内の appxmanifest.xml と完全に一致する必要があります。
New-SelfSignedCertificate -Type Custom -KeyUsage DigitalSignature `
-Subject "CN=MyPublisher" `
-CertStoreLocation "Cert:\CurrentUser\My" `
-TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") `
-FriendlyName "MyApp Dev Cert"
出力の拇印に注意してください。次の手順で必要になります。
手順 2: 証明書を PFX ファイルにエクスポートする
$password = ConvertTo-SecureString -String "YourPassword" -Force -AsPlainText
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Thumbprint>" `
-FilePath .\devcert.pfx -Password $password
手順 3: 証明書をローカルで信頼する
Import-PfxCertificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" `
-FilePath .\devcert.pfx -Password $password
手順 4: パッケージに署名する
SignTool sign /fd SHA256 /a /f .\devcert.pfx /p "YourPassword" MyApp.msix
SignTool の完全な使用方法については、「 SignTool を使用してアプリ パッケージに署名する」を参照してください。
テスト: 自己署名証明書を使用してテスト担当者に配布する
テスト担当者のコンピューターに自己署名 MSIX パッケージをインストールするには、まずそのコンピューターで証明書を信頼する必要があります。
注
Windows 10 バージョン 2004 以降 および Windows 11 では、サイドローディングは既定で有効になっています。 以前のバージョンのWindows 10では、テスト担当者は 設定 > 更新とセキュリティ > 開発者向け で Sideload apps を有効にする必要があります。
テスト担当者に証明書を渡します。.pfxまたは.cer (公開キーのみ) ファイルを.msix パッケージと共に共有します。
テスト担当者は、管理者特権の PowerShell プロンプトで次を実行します。
# If you shared a .pfx file (testers need the password)
Import-PfxCertificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" `
-FilePath .\devcert.pfx -Password (ConvertTo-SecureString "YourPassword" -Force -AsPlainText)
# If you shared a .cer file (public key only, no password needed)
Import-Certificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" -FilePath .\devcert.cer
証明書を信頼した後、テスト担当者は .msix をダブルクリックしてインストールできます。
Important
自己署名証明書は、テストにのみ使用する必要があります。 必要がなくなったら、テスターマシンからそれらを削除します。 広範な配布の場合は、代わりにパブリックに信頼された署名方法を使用してください。
プロダクション: Azureアーティファクト署名 (以前の信頼された署名)
Applies to: Windows 10 バージョン 1809 以降、Windows 11 (すべてのバージョン)、Windows Server 2016 以降
Azure アーティファクト サイニングは、以前は信頼された署名と呼ばれていたものの新しい名前です。 サービスは同一であり、変更された名前のみです。 一部のツール (azure/trusted-signing-action GitHub アクションや winget パッケージ ID など) では、それらの参照が時間の経過と同時に更新されるため、引き続き "信頼された署名" が表示されることがあります。
Azure成果物の署名は、実稼働 MSIX 署名に推奨されるオプションです。 評判は、特定の証明書ではなく検証済み ID に関連付けられます。つまり、ユーザーが署名済みアプリをインストールすると、発行元 ID によって時間の経過と同時に SmartScreen の評判が構築されます。 アカウントを設定する前に、資格要件とコスト情報については、「 MSIX パッケージの概要に署名 する」を参照してください。
Important
Azureアーティファクト署名の可用性: 米国、カナダ、欧州連合、英国の組織がサインアップできます。 個々の開発者は現在、米国とカナダに限定されています。 これらのリージョン以外の個々の開発者の場合は、代わりに CA からの OV コード署名証明書を使用します (以下の 「運用: OV コード署名証明書 」を参照)。
注
Azureアーティファクト署名を使用した署名では、SmartScreen の即時の信頼を提供しません。 OV 証明書と同様に、発行元 ID が十分なダウンロード評判 (通常は数週間と数百のクリーン インストール) を構築するまで、アプリには最初に SmartScreen 警告が表示されます。 これは、新しいパブリッシャーに対して想定される動作です。 SmartScreen の評判のしくみと、新しい発行元として期待される内容の詳細については、Windows アプリ開発者向けの SmartScreen の評判を参照してください。
前提条件
- ID 検証が完了し、証明書プロファイルが作成されたアーティファクト署名アカウント。 アーティファクト署名のクイックスタートを参照してください。
- 署名に使用される ID に割り当てられた 信頼された署名証明書プロファイル署名者 ロール。
手順 1: アーティファクト署名クライアント ツールをインストールする
Artifact Signing Client Tools には、必要な dlib プラグイン、互換性のあるバージョンの SignTool、および .NET 8 ランタイムが含まれます。 標準の SignTool 構文は、このパッケージを使用しない成果物署名では機能 しません 。
winget install -e --id Microsoft.Azure.ArtifactSigningClientTools
WinGet が使用できない場合 (Windows Server ビルド エージェントなど)、管理者として PowerShell を使用してインストールします。
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri "https://download.microsoft.com/download/70ad2c3b-761f-4aa9-a9de-e7405aa2b4c1/ArtifactSigningClientTools.msi" -OutFile .\ArtifactSigningClientTools.msi
Start-Process msiexec.exe -Wait -ArgumentList '/I ArtifactSigningClientTools.msi /quiet'
Remove-Item .\ArtifactSigningClientTools.msi
手順 2: メタデータ JSON ファイルを作成する
アーティファクト署名アカウントの詳細を含む metadata.json という名前のファイルを作成します。 エンドポイント URI は、アカウントを作成したAzureリージョンと一致する必要があります (アーティファクト署名アカウントの Azure ポータルで、Account URI で確認します)。
{
"Endpoint": "https://<region>.codesigning.azure.net/",
"CodeSigningAccountName": "<your-account-name>",
"CertificateProfileName": "<your-certificate-profile-name>"
}
リージョン固有のエンドポイント URI の完全な一覧については、「 署名の統合」を参照してください。
手順 3: 認証
Azure資格情報を環境変数として設定します (CI/CD にはアプリ登録資格情報を使用します)。
$env:AZURE_CLIENT_ID = "<your-client-id>"
$env:AZURE_TENANT_ID = "<your-tenant-id>"
$env:AZURE_CLIENT_SECRET = "<your-client-secret>"
または、対話型のローカル署名のために az login を実行します。
手順 4: パッケージに署名する
アーティファクト署名クライアント ツールと共にインストールされた SignTool を使用します。
/dlib フラグは、前の手順でインストールした dlib プラグインを指します。
signtool sign /v /fd SHA256 `
/tr "https://timestamp.acs.microsoft.com" /td SHA256 `
/dlib "C:\Program Files (x86)\Microsoft\ArtifactSigningClientTools\bin\Azure.CodeSigning.Dlib.dll" `
/dmdf .\metadata.json `
MyApp.msix
ヒント
/debug フラグを使用して、署名に失敗した場合に詳細な出力を取得します。証明書チェーンと認証の詳細が表示されます。
CI/CD: GitHub Actions
公式の azure/trusted-signing-actionを使用します。
- name: Sign MSIX with Azure Artifact Signing
uses: azure/trusted-signing-action@v0
with:
azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
endpoint: ${{ secrets.AZURE_TRUSTED_SIGNING_ENDPOINT }}
trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
files-folder: ${{ github.workspace }}\output
files-folder-filter: msix
Azure DevOpsについては、「信頼された署名を使用してAzure DevOpsを設定するを参照してください。
配信: Microsoft Store配布
Applies to: サポートされているすべてのWindows バージョン
Microsoft Storeを通じて配布する場合は、パッケージに自分で署名する必要はありません。ストアは申請プロセス中に署名します。 パッケージをビルドし、 パートナー センターから送信します。 ストアは、グローバルに信頼された署名を提供し、すべての証明書管理を処理します。
運用: OV コード署名証明書
Applies to: Windows 10 以降
リージョンまたは状況でアーティファクト署名を使用できない場合は、DigiCert、Sectigo、GlobalSign などの証明機関 (CA) から OV (組織検証) コード署名証明書を購入できます。 通常、コストの範囲は $300 ~ 500/年です。
CA から PFX ファイルを取得したら、
SignTool sign /fd SHA256 /a /f .\cert.pfx /p "YourPassword" `
/tr http://timestamp.digicert.com /td SHA256 `
MyApp.msix
完全な署名オプションについては、「 SignTool を使用してアプリ パッケージに署名する」を参照してください。
注
OV 証明書では、インスタント SmartScreen の信頼は提供されません。 署名済みパッケージがフラグ付けされずにインストールされると、評判は時間の経過と同時に構築されます。 詳細については、Windows アプリ開発者向けの SmartScreen の評判を参照してください。