SignTool を使ってアプリ パッケージに署名する

SignTool は、アプリ パッケージへのデジタル署名や証明書のバンドルに使用するコマンド ライン ツールです。 証明書は、(テスト目的で) ユーザーが作成することも、(配布目的で) 企業が作成することもできます。 アプリ パッケージに署名すると、アプリのデータが署名後に変更されていないこと、また、アプリ パッケージに署名したユーザーまたは企業の ID が正しいことをユーザーに保証できます。 SignTool では、暗号化されているかどうかを問わずアプリ パッケージとアプリ バンドルに署名できます。

重要

Visual Studio を使用してアプリを開発する場合は、Visual Studio のウィザードを使ってアプリ パッケージを作成し、署名することをお勧めします。 詳細については、「UWPアプリをパッケージ化する」と「Visual Studio を使用してソース コードからデスクトップ アプリをパッケージ化する」をVisual Studio。

コード署名と証明書について詳しくは、「Introduction to Code Signing」(コード署名の概要) を参照してください。

[前提条件]

  • パッケージ アプリ
    手動でのアプリ パッケージの作成の詳細については、「MakeAppx.exe ツールを使ったアプリ パッケージの作成」を参照してください。

  • 有効な署名証明書
    有効な署名証明書の作成またはインポートの詳細については、「パッケージ署名用の証明書を作成する」を参照してください。

  • SignTool.exe
    SDK のインストール パスに基づき、SignTool は Windows 10 PC の以下の場所にあります。

    • x86: C:\Program Files (x86)\Windows Kits\10\bin \ < sdk バージョン\x86\SignTool.exe >
    • x64: C:\Program Files (x86)\Windows Kits\10\bin \ < sdk バージョン\x64\SignTool.exe >

SignTool の使用

SignTool は、ファイルの署名、署名やタイプスタンプの確認、署名の削除などに使用できます。 ここでは、アプリ パッケージの署名に関連がある、sign コマンドについて説明します。 SignTool の詳細については、SignTool のリファレンス ページを参照してください。

ハッシュ アルゴリズムの特定

SignTool を使用してアプリ パッケージやアプリ バンドルを署名するときは、SignTool で使用するハッシュ アルゴリズムとアプリのパッケージ作成に使用したアルゴリズムは同じである必要があります。 たとえば、MakeAppx.exe を使用して既定の設定でアプリ パッケージを作成した場合、SignTool を使用するときは、MakeAppx.exe によって使用される既定のアルゴリズムである SHA256 を使用する必要があります。

アプリのパッケージ作成時に使用したハッシュ アルゴリズムを確認するには、アプリ パッケージのコンテンツを抽出し、AppxBlockMap.xml ファイルを調べます。 アプリ パッケージのアンパック方法や抽出方法については、「パッケージまたはバンドルからファイルを抽出する」を参照してください。 hash メソッドは BlockMap 要素に含まれ、形式は次のとおりです。

<BlockMap xmlns="http://schemas.microsoft.com/appx/2010/blockmap"
HashMethod="http://www.w3.org/2001/04/xmlenc#sha256">

各 HashMethod の値とそれに対応するハッシュ アルゴリズムを次の表に示します。

HashMethod 値 ハッシュ アルゴリズム
http://www.w3.org/2001/04/xmlenc#sha256 SHA256
http://www.w3.org/2001/04/xmldsig-more#sha384 SHA384
http://www.w3.org/2001/04/xmlenc#sha512 SHA512

注意

SignTool の既定のアルゴリズムは (MakeAppx.exe で使用できない) SHA1 であるため、SignTool を使用するときは、必ずハッシュ アルゴリズムを指定する必要があります。

アプリ パッケージの署名

すべての前提条件が整い、アプリのパッケージの作成に使用したハッシュ アルゴリズムを特定できたら、アプリ パッケージに署名することができます。

SignTool のパッケージ署名に通常使用するコマンド ライン構文は、次のとおりです。

SignTool sign [options] <filename(s)>

アプリの署名に使用する証明書は .pfx ファイルであるか、証明書ストアにインストールされている必要があります。

.pfx ファイルの証明書を使用してアプリ パッケージに署名するには、次の構文を使用します。

SignTool sign /fd <Hash Algorithm> /a /f <Path to Certificate>.pfx /p <Your Password> <File path>.appx
SignTool sign /fd <Hash Algorithm> /a /f <Path to Certificate>.pfx /p <Your Password> <File path>.msix

/a オプションを使用すると、SignTool によって自動的に最適な証明書が選択されます。

.pfx ファイルの証明書ではない場合は、次の構文を使用します。

SignTool sign /fd <Hash Algorithm> /n <Name of Certificate> <File Path>.appx
SignTool sign /fd <Hash Algorithm> /n <Name of Certificate> <File Path>.msix

または、次の構文を使用して、<証明署名> ではなく、使用する証明書の SHA1 ハッシュを指定することもできます。

SignTool sign /fd <Hash Algorithm> /sha1 <SHA1 hash> <File Path>.appx
SignTool sign /fd <Hash Algorithm> /sha1 <SHA1 hash> <File Path>.msix

その他の例については 、「SignTool を使用してファイルに署名する」を参照してください。

証明書の中には、パスワードを使用しないものもあります。 証明書がパスワードを使用していない場合は、サンプル コマンドの "/p <パスワード>" を省略してください。

アプリ パッケージが有効な証明書で署名されると、パッケージをストアにアップロードできます。 ストアへのアプリのアップロードと申請の詳しいガイダンスについては、「アプリの申請」を参照してください。