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: 現在、デジタル署名に代わる方法はありません。