MSIX パッケージに署名する: エンド ツー エンド ガイド

このガイドでは、ローカル テストから運用配布まで、開発の各段階で MSIX パッケージに署名する手順について説明します。 署名オプションとコストの比較については、「 MSIX パッケージの署名の概要」を参照してください。

署名方法を選択する

Stage 推奨される方法 Windows バージョン
ローカルでの開発とテスト WinApp CLI (自己署名証明書) Windows 10以降
テスターへの配布 (サイドローディング) 証明書信頼ステップを使用した自己署名証明書 Windows 10以降
製品の配布 Azure Artifact Signing (以前の名称: 信頼された署名) Windows 10 バージョン 1809 以降、Windows Server 2016 以降
Microsoft Storeディストリビューション ストアが提出時に署名済み サポートされているすべてのWindowsバージョン

開発: ローカルテストのために署名する

ローカル開発の場合は、自己署名証明書を使用します。 自己署名パッケージは、証明書が明示的に信頼されているマシンにのみインストールできます。これは意図的であり、テストに適しています。

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 の評判を参照してください。