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