SignTool を使ってアプリ パッケージに署名するSign an app package using SignTool

SignTool は、アプリ パッケージへのデジタル署名や証明書のバンドルに使用するコマンド ライン ツールです。SignTool is a command line tool used to digitally sign an app package or bundle with a certificate. 証明書は、(テスト目的で) ユーザーが作成することも、(配布目的で) 企業が作成することもできます。The certificate can either be created by the user (for testing purposes) or issued by a company (for distribution). アプリ パッケージに署名すると、アプリのデータが署名後に変更されていないこと、また、アプリ パッケージに署名したユーザーまたは企業の ID が正しいことをユーザーに保証できます。Signing an app package provides the user with verification that the app's data has not been modified after it was signed while also confirming the identity of the user or company that signed it. SignTool では、暗号化されているかどうかを問わずアプリ パッケージとアプリ バンドルに署名できます。SignTool can sign encrypted or unencrypted app packages and bundles.

重要

Visual Studio を使用してアプリを開発する場合は、Visual Studio のウィザードを使ってアプリ パッケージを作成し、署名することをお勧めします。If you used Visual Studio to develop your app, it's recommended that you use the Visual Studio wizard to create and sign your app package. 詳しくは、「Visual Studio での UWP アプリのパッケージ化」をご覧ください。For more information, see Package a UWP app with Visual Studio.

コード署名と証明書について詳しくは、「Introduction to Code Signing」(コード署名の概要) を参照してください。For more information about code signing and certificates in general, see Introduction to Code Signing.

前提条件Prerequisites

  • パッケージ アプリA packaged app
    手動でのアプリ パッケージの作成の詳細については、「MakeAppx.exe ツールを使ったアプリ パッケージの作成」を参照してください。To learn more about manually creating an app package, see Create an app package with the MakeAppx.exe tool.

  • 有効な署名証明書A valid signing certificate
    有効な署名証明書の作成またはインポートの詳細については、「パッケージ署名用の証明書を作成する」を参照してください。For more information about creating or importing a valid signing certificate, see Create or import a certificate for package signing.

  • SignTool.exeSignTool.exe
    SDK のインストール パスに基づき、SignTool は Windows 10 PC の以下の場所にあります。Based on your installation path of the SDK, this is where SignTool is on your Windows 10 PC:

    • x86: C:\Program Files (x86)\Windows Kits\10\bin\x86\SignTool.exex86: C:\Program Files (x86)\Windows Kits\10\bin\x86\SignTool.exe
    • x64: C:\Program Files (x86)\Windows Kits\10\bin\x64\SignTool.exex64: C:\Program Files (x86)\Windows Kits\10\bin\x64\SignTool.exe

SignTool の使用Using SignTool

SignTool は、ファイルの署名、署名やタイプスタンプの確認、署名の削除などに使用できます。SignTool can be used to sign files, verify signatures or timestamps, remove signatures, and more. ここでは、アプリ パッケージの署名に関連がある、sign コマンドについて説明します。For the purpose of signing an app package, we will focus on the sign command. SignTool の詳細については、SignTool のリファレンス ページを参照してください。For full information on SignTool, see the SignTool reference page.

ハッシュ アルゴリズムの特定Determine the hash algorithm

SignTool を使用してアプリ パッケージやアプリ バンドルを署名するときは、SignTool で使用するハッシュ アルゴリズムとアプリのパッケージ作成に使用したアルゴリズムは同じである必要があります。When using SignTool to sign your app package or bundle, the hash algorithm used in SignTool must be the same algorithm you used to package your app. たとえば、MakeAppx.exe を使用して既定の設定でアプリ パッケージを作成した場合、SignTool を使用するときは、MakeAppx.exe によって使用される既定のアルゴリズムである SHA256 を使用する必要があります。For example, if you used MakeAppx.exe to create your app package with the default settings, you must specify SHA256 when using SignTool since that's the default algorithm used by MakeAppx.exe.

アプリのパッケージ作成時に使用したハッシュ アルゴリズムを確認するには、アプリ パッケージのコンテンツを抽出し、AppxBlockMap.xml ファイルを調べます。To find out which hash algorithm was used while packaging your app, extract the contents of the app package and inspect the AppxBlockMap.xml file. アプリ パッケージのアンパック方法や抽出方法については、「パッケージまたはバンドルからファイルを抽出する」を参照してください。To learn how to unpack/extract an app package, see Extract files from a package or bundle. hash メソッドは BlockMap 要素に含まれ、形式は次のとおりです。The hash method is in the BlockMap element and has this format:

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

各 HashMethod の値とそれに対応するハッシュ アルゴリズムを次の表に示します。This table shows each HashMethod value and its corresponding hash algorithm:

HashMethod 値HashMethod value ハッシュ アルゴリズムHash Algorithm
http://www.w3.org/2001/04/xmlenc#sha256 SHA256SHA256
http://www.w3.org/2001/04/xmldsig-more#sha384 SHA384SHA384
http://www.w3.org/2001/04/xmlenc#sha512 SHA512SHA512

注意

SignTool の既定のアルゴリズムは (MakeAppx.exe で使用できない) SHA1 であるため、SignTool を使用するときは、必ずハッシュ アルゴリズムを指定する必要があります。Since SignTool's default algorithm is SHA1 (not available in MakeAppx.exe), you must always specify a hash algorithm when using SignTool.

アプリ パッケージの署名Sign the app package

すべての前提条件が整い、アプリのパッケージの作成に使用したハッシュ アルゴリズムを特定できたら、アプリ パッケージに署名することができます。Once you have all of the prerequisites and you've determined which hash algorithm was used to package your app, you're ready to sign it.

SignTool のパッケージ署名に通常使用するコマンド ライン構文は、次のとおりです。The general command line syntax for SignTool package signing is:

SignTool sign [options] <filename(s)>

アプリの署名に使用する証明書は .pfx ファイルであるか、証明書ストアにインストールされている必要があります。The certificate used to sign your app must be either a .pfx file or be installed in a certificate store.

.pfx ファイルの証明書を使用してアプリ パッケージに署名するには、次の構文を使用します。To sign your app package with a certificate from a .pfx file, use the following syntax:

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 によって自動的に最適な証明書が選択されます。Note that the /a option allows SignTool to choose the best certificate automatically.

.pfx ファイルの証明書ではない場合は、次の構文を使用します。If your certificate is not a .pfx file, use the following syntax:

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 ハッシュを指定することもできます。Alternatively, you can specify the SHA1 hash of the desired certificate instead of <Name of Certificate> using this syntax:

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

証明書の中には、パスワードを使用しないものもあります。Note that some certificates do not use a password. 証明書がパスワードを使用していない場合は、サンプル コマンドの "/p <パスワード>" を省略してください。If your certificate does not have a password, omit "/p <Your Password>" from the sample commands.

アプリ パッケージが有効な証明書で署名されると、パッケージをストアにアップロードできます。Once your app package is signed with a valid certificate, you're ready to upload your package to the Store. ストアへのアプリのアップロードと申請の詳しいガイダンスについては、「アプリの申請」を参照してください。For more guidance on uploading and submitting apps to the Store, see App submissions.

一般的なエラーとトラブルシューティングCommon errors and troubleshooting

SignTool の使用時に発生する最も一般的なエラーは内部エラーで、代表的なエラーは次の通りです。The most common types of errors when using SignTool are internal and typically look something like this:

SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B) 

0x80080206 (APPX_E_CORRUPT_CONTENT) など、エラー コードが 0x8008 で始まる場合、署名対象のパッケージは無効です。If the error code starts with 0x8008, such as 0x80080206 (APPX_E_CORRUPT_CONTENT), the package being signed is invalid. このようなエラーが発生した場合は、パッケージをビルドし直し、SignTool をもう一度実行してください。If you get this type of error you must rebuild the package and run SignTool again.

SignTool には、証明書のエラーとフィルタリングを表示できるデバッグ オプションがあります。SignTool has a debug option available to show certificate errors and filtering. デバッグ機能を使用するには、/debug オプションを sign の直後に指定し、その後ろに完全な SignTool コマンドを指定します。To use the debugging feature, place the /debug option directly after sign, followed by the full SignTool command.

SignTool sign /debug [options]

さらに一般的なエラーとしては、0x8007000B があります。A more common error is 0x8007000B. この種類のエラーについては、イベント ログで詳細を確認してください。For this type of error, you can find more information in the event log.

イベント ログで詳細を参照するには、次の手順を実行します。To find more information in the event log:

  • Eventvwr.msc を実行します。Run Eventvwr.msc
  • イベント ログを開きます。[イベント ビューアー (ローカル)]、[アプリケーションとサービス ログ]、[Microsoft]、[Windows]、[AppxPackagingOM]、[Microsoft-Windows-AppxPackaging/稼働中] の順に展開します。Open the event log: Event Viewer (Local) -> Applications and Services Logs -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • 最新のエラー イベントを検索します。Find the most recent error event

内部エラーの 0x8007000B は、通常、次のいずれかの値に対応しています。The internal error 0x8007000B usually corresponds to one of these values:

イベント IDEvent ID イベント文字列の例Example event string 推奨事項Suggestion
150150 エラー 0x8007000B: アプリ マニフェストの発行元の名前 (CN=Contoso) は、署名証明書のサブジェクト名 (CN=Contoso, C=US) と同じにする必要があります。error 0x8007000B: The app manifest publisher name (CN=Contoso) must match the subject name of the signing certificate (CN=Contoso, C=US). アプリ マニフェストの発行元の名前は、署名のサブジェクト名と完全に一致する必要があります。The app manifest publisher name must exactly match the subject name of the signing.
151151 エラー 0x8007000B: 指定されている署名ハッシュ方式 (SHA512) は、アプリ バンドルのブロック マップで使用されているハッシュ方式 (SHA256) と同じにする必要があります。error 0x8007000B: The signature hash method specified (SHA512) must match the hash method used in the app package block map (SHA256). /fd パラメーターに指定されている hashAlgorithm が、正しくありません。The hashAlgorithm specified in the /fd parameter is incorrect. (アプリ パッケージの作成に使用した) アプリ パッケージのブロック マップと一致する hashAlgorithm を使用して SignTool を再実行してください。Rerun SignTool using hashAlgorithm that matches the app package block map (used to create the app package)
152152 エラー 0x8007000B: アプリ パッケージの内容は、そのブロック マップに対して検証する必要があります。error 0x8007000B: The app package contents must validate against its block map. アプリ パッケージは破損しています。再ビルドして、新しいブロック マップを生成する必要があります。The app package is corrupt and needs to be rebuilt to generate a new block map. アプリ パッケージの作成の詳細については、「MakeAppx.exe ツールを使ったアプリ パッケージの作成」を参照してください。For more about creating an app package, see Create an app package with the MakeAppx.exe tool