SignTool の既知の問題とトラブルシューティング

SignTool の使用時に発生する最も一般的なエラーは内部エラーで、代表的なエラーは次の通りです。

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

0x80080206 (APPX_E_CORRUPT_CONTENT) など、エラー コードが 0x8008 で始まる場合、署名対象のパッケージは無効です。 このようなエラーが発生した場合は、パッケージをビルドし直し、SignTool をもう一度実行してください。

SignTool には、証明書のエラーとフィルタリングを表示できるデバッグ オプションがあります。 デバッグ機能を使用するには、オプションの直後にオプションを /debug 配置し、その後 signに完全な SignTool コマンドを 続けてください。

SignTool sign /debug [options]

さらに一般的なエラーとしては、0x8007000B があります。 この種類のエラーについては、イベント ログで詳細を確認してください。

イベント ログで詳細を参照するには、次の手順を実行します。

  • Eventvwr.msc を実行します。
  • イベント ログを開きます。[イベント ビューアー (ローカル)] > [アプリケーションとサービス ログ] > [Microsoft] > [Windows] > [AppxPackagingOM] > [Microsoft-Windows-AppxPackaging/Operational] の順に展開します。
  • 最新のエラー イベントを検索します。

内部エラーの 0x8007000B は、通常、次のいずれかの値に対応しています。

イベント ID イベント文字列の例 提案される解決策
150 エラー 0x8007000B: アプリ マニフェストの発行元の名前 (CN=Contoso) は、署名証明書のサブジェクト名 (CN=Contoso, C=US) と同じにする必要があります。 アプリ マニフェストの発行元の名前は、署名のサブジェクト名と完全に一致する必要があります。
151 エラー 0x8007000B: 指定されている署名ハッシュ方式 (SHA512) は、アプリ バンドルのブロック マップで使用されているハッシュ方式 (SHA256) と同じにする必要があります。 /fd パラメーターに指定されている hashAlgorithm が、正しくありません。 (アプリ パッケージの作成に使用した) アプリ パッケージのブロック マップと一致する hashAlgorithm を使用して SignTool を再実行してください。
152 エラー 0x8007000B: アプリ パッケージの内容は、そのブロック マップに対して検証する必要があります。 アプリ パッケージは破損しています。再ビルドして、新しいブロック マップを生成する必要があります。 アプリ パッケージの作成の詳細については、「MakeAppx.exe ツールを使ったアプリ パッケージの作成」を参照してください。

もう 1 つの一般的なエラーは、0x80080057 です。 Windows で SignTool ツールを使用して、移植可能な実行可能 (PE) ファイルに署名しようとすると、次の問題が発生する場合があります。

  • 4 ギガバイト (GB) 以上の PE ファイルに署名できませんでした。 署名しようとすると、"無効なパラメーター (0x80080057)" というエラーメッセージが表示されます。

  • 4 GB を超えるファイルの場合、SignTool がファイルに正常に署名したとしても、生成されるハッシュが正確でない場合があります。

    Note

    これは、特に .cat ファイルの場合に当てはまります。

この問題は、.exe、.sys などの PE ファイルで発生します。 この問題は、イメージのサイズを指定する PE ヘッダーの ULONG 変数が原因で発生します (イメージ サイズは、Vista 以前のバージョンなどの下位レベルのオペレーティング システムでは 2 GB です)。これは 1996 年以来の設計上の制限事項です。 この値の上限は、.exe や .sys など、PE ファイルでは 4 GB です。 通常、.cat ファイルは署名されていますが、生成される内部ハッシュが正確でない場合があります。

この問題を回避するには、署名しようとしているすべての PE ファイルが 4 GB 未満であることを確認します。 旧バージョンとの互換性の問題のため、バックポートも永続的な修正もできません。 ただし、この問題は調査中です。

Note

この問題は、SignTool に固有のものではありません。 PE ヘッダーの設計は、使用されているツールに関係なく、Windows 7 以降の Windows のバージョンでは 4 GB に制限されています。

よく寄せられる質問 (FAQ)

Q1: Windows でのデジタル署名 (およびタイムスタンプ副署名) の現在の正式なファイル サイズの上限は何ですか。

A1: .exe や .sys などの PE ファイルの場合、署名の最大ファイルサイズは 4 GB です。

Q2: 大きなファイルに署名するための最大の機能を備えているような Windows の特定のバージョン (Windows Server 2016 など) はありますか。

A2: いいえ。この問題は、Windows のすべてのバージョンに影響します。

Q3:64 ビット版の Signtool では、32ビット版よりもこの機能のサポートが強化されていますか。

A3: いいえ。64 ビット版の SignTool では、32 ビット版と同じ値が使用されます。 そのため、この問題は 64 ビット版でも未解決です。

Q4: 64 ビット版の SignTool を使用して署名されたファイルを 32ビット版の Windows で使用していると、問題が発生する可能性がありますか。

A:いいえ。 ただし、使用されている SignTool のバージョンに関係なく、制限は残ります。

Q5: 異なる署名ツールまたはメソッドをすべて使用する必要がありますか。

A: 現在、デジタル署名に代わる方法はありません。