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 が正常にファイルに署名できる場合でも、生成されたハッシュが正確でない可能性があります。

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

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

この問題を回避するには、署名しようとしている PE ファイルが 4 GB 未満であることを確認します。 これは、下位互換性の制約により、計画的な修正がない PE 形式の既知の設計上の制限です。

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

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

Q1: Windowsでのデジタル署名 (およびタイム スタンプ カウンター署名) の現在の公式のファイル サイズ制限は何ですか?

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

Q2: Windows Server 2016など、大きなファイルに署名する機能が最も多い特定のバージョンのWindowsはありますか。

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

Q3: 64 ビット バージョンの Signtool では、この機能は 32 ビット バージョンよりも優れていますか?

A: いいえ。64 ビット バージョンの SignTool では、32 ビット バージョンと同じ値が使用されます。 そのため、問題は 64 ビットのままです。

Q4: 32 ビット バージョンの Windows を使用しているお客様は、64 ビット バージョンの SignTool を使用して署名されたファイルを使用しようとすると、問題が発生する可能性がありますか。

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

Q5: 別の署名ツールまたは方法を完全に使用する必要がありますか?

A: はい。 Azure の信頼された署名 はMicrosoftのマネージド コード署名サービスであり、独自の証明書を管理するための最新の代替手段として推奨されます。 証明書のライフサイクル管理を処理し、CI/CD パイプラインと統合します。 Azure Key Vault は、クラウドに格納された証明書を使用して署名するためのもう 1 つのオプションです。 オフラインまたはセルフサービスのシナリオでは、SignTool は引き続き標準ツールです。