MSIX の永続的な ID

この機能を使用すると、アプリの更新エクスペリエンスを維持しながら、新しい証明書を使用してパッケージに署名できます。 つまり、古い (元の) 証明書を使用して署名しなくても、パッケージで元のパッケージ ID を保持することができます。 Windows Insider Preview ビルド 22000 以降では、古い証明書と署名に今使用されている新しい証明書との関係を示すために、成果物を作成することが必要になります。 以下で、更新エクスペリエンスを維持するためにパッケージ ID を保持する方法について、ステップバイステップで説明します。

要件

  • Windows SDK を使用して MakeAppx.exe を取得する。 この機能は、Windows SDK Preview 22000 で現在使用できます
  • Windows SDK を使用して SignTool.exe を取得する。 この機能は、Windows SDK Preview 22000 で現在使用できます
  • 元のパッケージの署名に使用された古い証明書 (CN=Old)
  • パッケージの署名に使用される新しい証明書 (CN=New)

チュートリアル

これは、パッケージ ID を維持しながら、新しい証明書でパッケージに署名する方法に関するステップバイステップ ガイドです。

成果物を作成する

  1. 古い発行元と新しい発行元の詳細を説明する XML 成果物を作成します。 artifact.xml など、任意の名前を付けます。
<?xml version="1.0" encoding="UTF-8"?>
<Publisher xmlns="http://schemas.microsoft.com/appx/publisherbridging/2021" Old="CN=Old" New="CN=New" />
  1. 成果物の署名に使用されるカタログを作成するため、カタログ定義ファイル (CDF) を作成します。 artifact.cdf など、任意の名前を付けます。
[CatalogHeader]
Name=artifact.cat
CatalogVersion=2
HashAlgorithms=SHA256

[CatalogFiles]
<HASH>artifact.xml=artifact.xml
  1. この CDF で makecat.exe を実行します。 これにより、その中で指定されたファイルが作成されます
makecat.exe artifact.cdf
  1. 古い証明書を使用してカタログに署名します
signtool.exe sign /f old-cert.pfx /fd SHA256 artifact.cat

この時点では、後の手順のために XML ファイルと CAT ファイルを保持しておくだけで構いません。 複数の成果物を作成できますが、プラットフォームで現在サポートされているのは 5 つまでです。

Note

カタログ ファイルにタイムスタンプを付けることをお勧めします。 カタログにタイムスタンプが付けられていない場合、古い証明書の有効期限が切れた時点でその成果物は使用できなくなります。

パッケージを作成する

  1. makeappx.exe に使用すべき成果物を指定するために、発行元ブリッジ ファイルを作成します。 このファイルは、マッピング ファイルに似ています。 artifacts.txt など、任意の名前を付けます
[PublisherBridging]
"artifact.xml" "artifact.cat"

各行には、XML ファイル パスと CAT ファイル パスのペアが含まれている必要があります。 この成果物は、適用される順序に従って並べる必要があります。 Publisher1->Publisher2 に向かう成果物と、Publisher2->Publisher3 に向かう成果物の 2 つの成果物がある場合は、Publisher1->Publisher2 の成果物をまずリストする必要があります。

  1. 発行元ブリッジ ファイルを指すように /pb フラグを指定して makeappx.exe を呼び出します。
makeappx.exe pack /p app.msix /d .\app\ /pb artifacts.txt
  1. 新しい証明書を使用してパッケージに署名します
signtool.exe sign /f new-cert.pfx /fd SHA256 app.msix

これで、成果物が内部に格納され、新しい証明書で署名されたパッケージが作成されました。 他の MSIX パッケージと同様にこのパッケージを展開できます。

考慮事項

  • カタログにはタイムスタンプを付けることをお勧めします。 これを行うには、SignTool への呼び出しで、カタログへのパスの前に /td SHA256 /tr という引数を追加する必要があります。

  • 新しい証明書によって署名されたパッケージをプラットフォームでインストールするには、マシンに古い証明書 (タイムスタンプの使用を推奨) をインストールすることが依然として必要になります。

  • この機能を利用するには、古い証明書の有効期限が切れる前にこの操作を行う必要があります。

  • この機能は、MSIX パッケージと MSIX バンドルの両方で機能します。