MSIX パッケージに署名する

アプリ パッケージの署名は、展開できる MSIX パッケージを作成するプロセスで必要な手順です。 Windowsでは、有効なコード署名証明書を使用して MSIX パッケージに署名する必要があります。

Windows アプリケーションを正常にインストールするには、パッケージに署名する必要があるだけでなく、デバイスでも信頼されている必要があります。 つまり、証明書は、デバイス上の信頼されたルートのいずれかにチェーンする必要があります。 既定では、Windowsは、コード署名証明書を提供するほとんどの証明機関の証明書を信頼します。

また、MSIX バンドルを作成する場合は、バンドル内のすべてのパッケージに個別に署名する必要はありません。 バンドルにのみ署名する必要があります。署名はバンドル内のパッケージを対象とします。

署名オプション

シナリオに基づいて署名方法を選択します。

シナリオ オプション Cost
開発とローカル テスト 自己署名証明書 Free
運用環境の配布 (推奨) Azure アーティファクト署名 (旧称: 信頼された署名) 基本: ~$10/月
運用環境の配布 (代替) CA からの OV コード署名証明書 $300 – 500/年
Microsoft Storeディストリビューション ストアが提出時に署名済み Free

Azure Artifact Signing (旧称 Trusted Signing) はMicrosoftのマネージド コード署名サービスであり、実稼働 MSIX 署名に推奨されるオプションです。 主な特性:

  • ID ベースの評判: 評判は、特定の証明書ではなく、検証済みの発行元 ID に関連付けられているため、ビルド間で蓄積されます。 ただし、すべてのストア以外の配布と同様に、新しいアプリでも、十分なダウンロード履歴がビルドされるまで SmartScreen の警告が表示されます。通常、これには数週間かかります。 Windows アプリ開発者向けの SmartScreen の評判を参照してください。
  • 有効期間の短い証明書: 新しい証明書が毎日発行され、各証明書は約 3 日間有効であり、必要に応じて正確な失効が可能になります。
  • CI/CD ready: GitHub Actions (azure/trusted-signing-action) とAzure DevOpsをすぐにサポートします。

パブリック トラスト証明書の資格: 米国、カナダ、欧州連合、英国の組織、および米国およびカナダの個々の開発者が利用できます。 組織には、3 年以上の検証可能な税履歴が必要です。 ID 検証の重要な情報を参照してください。

Signing with SignTool には追加のセットアップが必要です: SignTool は、必要な dlib プラグインと .NET 8 ランタイムを含む Artifact Signing Client Tools を使用する場合にのみ、アーティファクト署名で機能します。 アカウント エンドポイントと証明書プロファイルを含む metadata.json ファイルも指定する必要があります。 SDK SignTool の標準Windows呼び出し自体は、成果物署名では機能しません。 最も簡単なインストールは次のとおりです。

winget install -e --id Microsoft.Azure.ArtifactSigningClientTools

完全 なセットアップについては、「アーティファクト署名を使用して SignTool を設定する」を参照してください。

AzureSignTool は、Azure Key Vaultに格納されている証明書を使用して署名するための別のコミュニティ ツールです。 アーティファクト署名はサポート されていません 。2 つのサービスは異なります。 Visual StudioでのAzure Key Vaultベースの署名については、「Azure Key Vault でパッケージに署名する」を参照してください。

WinApp CLI

WinApp CLI には、開発署名に便利なコマンドが用意されています。

  • winapp cert generate — 開発用の自己署名証明書を作成する
  • winapp sign — 証明書を使用して MSIX パッケージまたは実行可能ファイルに署名する
  • winapp tool signtool — Windows SDK から直接 SignTool にアクセスします

署名に関するトピック

トピック 説明
署名の前提条件 アプリ パッケージに署名するために必要な前提条件。
SignTool の使用 Windows SDK から SignTool を使用してアプリ パッケージに署名する方法。
Azure Key Vault Visual StudioからAzure Key Vaultに格納されている証明書を使用してパッケージに署名する方法。
Device Guard 署名を使用して MSIX パッケージに署名する Device Guard 署名を使用してアプリに署名する方法。
テスト用の署名されていないパッケージの作成 テスト用に署名されていない MSIX パッケージを作成する方法。
Azure Artifact Signing 本番用 MSIX パッケージのためのMicrosoft のマネージド署名サービス (旧称: 信頼された署名)。

タイムスタンプ

証明書を使用してアプリに署名するときに タイムスタンプ を使用することを強くお勧めします。 タイムスタンプは署名を保持し、証明書の有効期限が切れた後でもアプリ のデプロイ プラットフォームでアプリ パッケージを受け入れることを許可します。 パッケージ検査時に、タイムスタンプを使用すると、署名された時刻に関してパッケージ署名を検証できます。 これにより、証明書が無効になった後でもパッケージを受け入れることができます。 タイムスタンプのないパッケージは現在の時刻に対して評価され、証明書が無効になった場合、Windowsはパッケージを受け入れなくなります。

タイムスタンプの有無によるアプリ署名に関連するさまざまなシナリオを次に示します。

シナリオ タイムスタンプなしでアプリが署名されている アプリがタイムスタンプ付きで署名されている
証明書は有効です アプリがインストールされます アプリがインストールされます
証明書が無効です (有効期限が切れています) アプリのインストールに失敗する タイムスタンプ機関による署名時に証明書の信頼性が検証されたため、アプリがインストールされます

アプリがデバイスに正常にインストールされた場合、タイムスタンプの有無に関係なく、証明書の有効期限が切れた後もアプリは引き続き実行されます。

パッケージの整合性の強制

信頼されたアプリケーションのみがデバイスにインストールされるようにするだけでなく、MSIX パッケージに署名する追加の利点は、Windowsがデバイスに展開された後にパッケージとその内容の整合性を適用できるようにすることです。 署名済みパッケージ内の AppxBlockMap.xmlAppxSignature.p7x にチェーンすることで、Windowsは実行時およびWindows Defenderスキャン時にパッケージとその内容の整合性に関する検証チェックを実行できます。 パッケージが改ざんされたと見なされた場合、Windowsアプリケーションの起動がブロックされ、修復ワークフローが開始され、パッケージが修復または再インストールされます。 Microsoft Storeを介して配布されないパッケージの場合、パッケージが uap10:PackageIntegrity 要素を宣言し、Windows 2004 以降のビルドにデプロイされている場合は、パッケージの整合性が適用されます。 AppxManifest.xmlでのパッケージ整合性の適用の宣言例を次に示します。

<Package ...
xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"  
IgnorableNamespaces="uap10">
...
  <Properties>
    <uap10:PackageIntegrity>
      <uap10:Content Enforcement="on" />
    </uap10:PackageIntegrity>
  </Properties>
...
</Package>

デバイス モード

Windows 10を使用すると、ユーザーは設定アプリでデバイスを実行するモードを選択できます。 モードは、Microsoft Store アプリ、サイドロード アプリ、開発者モードです。

Microsoft Store アプリは、Microsoft Storeからのアプリのインストールのみを許可するため、最も安全です。 Microsoft Store内のアプリは、アプリが安全に使用できるように、認定プロセスを経て実行されます。

サイドロード アプリ開発者モード は、それらの証明書が信頼され、デバイス上の信頼されたルートのいずれかにチェーンされている限り、他の証明書によって署名されるアプリの方が許容されます。 開発者であり、Windows 10 アプリをビルドまたはデバッグしている場合にのみ、[開発者モード] を選択します。 開発者モードとその提供内容の詳細については、 こちらをご覧ください

Windows 10 バージョン 2004 以降では、Sideload オプションは既定でオンになっています。 その結果、 開発者モード が切り替えになりました。 企業は引き続きポリシーを使用してサイドローディングをオフにすることができます。