SignTool

SignTool は、ファイルにデジタル署名し、ファイル内の署名を検証し、ファイルにタイム スタンプを付けるコマンド ライン ツールです。 ファイルの署名が重要な理由については、「 コード署名の概要」を参照してください。

このツールは、Microsoft Windows Software Development Kit (SDK) インストール パスの \Bin フォルダーにインストールされます (C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exeなど)。

SignTool は Windows SDK の一部として使用でき、 Windows SDK からダウンロードできます。

Note

WINDOWS 10 SDK、HLK、WINDOWS 10 WDK、Windows 10 ADK ビルド 20236 以降をWindows 10するには、ダイジェスト アルゴリズムを指定する必要があります。 SignTool sign コマンドには、署名時とタイム スタンプ時に、それぞれファイル ダイジェスト アルゴリズム オプション (/fd) とタイム スタンプ ダイジェスト アルゴリズム オプション (/td) が必要です。

/fdが署名時に指定されておらず、タイム スタンプ中に が指定されていない場合/td、コマンドは最初に警告エラー コード 0 をスローします。 新しいバージョンの SignTool では、警告はエラーになります。 SHA256 をお勧めします。 業界では SHA1 よりも安全性が高いと見なされます。

構文

signtool [command] [options] [file_name | ...]

パラメーター

引数 説明
command ファイルに対して実行する操作を指定する 4 つのコマンドのいずれか: catdbsigntimestamp、または verify。 各コマンドの詳細については、次の表を参照してください。
options コマンドを変更するオプションです。 グローバル オプション /q および /v のほかに、各コマンドは固有のオプション セットをサポートします。
file_name 署名するファイルへのパスです。

SignTool では、次のコマンドがサポートされています。

コマンド 説明
catdb カタログ ファイルをカタログ データベースに追加したり、カタログ データベースから削除したりします。 カタログ データベースは、カタログ ファイルの自動検索で使用され、GUID によって識別されます。 コマンドでサポートされるオプションの一覧については、「catdb コマンド オプションcatdb」を参照してください。
sign ファイルにデジタル署名します。 デジタル署名はファイルを改ざんから保護し、ユーザーが署名証明書に基づいて署名者を検証できるようにします。 コマンドで sign サポートされるオプションの一覧については、「 sign command options」を参照してください。
timestamp タイム スタンプ ファイル。 コマンドでサポートされるオプションの一覧については、「timestamp コマンド オプションtimestamp」を参照してください。
verify ファイルのデジタル署名を検証します。 署名証明書が信頼された機関によって発行されたかどうか、署名証明書が取り消されたかどうか、および必要に応じて、署名証明書が特定のポリシーに対して有効かどうかを判断します。 コマンドでサポートされるオプションの一覧については、「コマンド オプションのverify確認」を参照してください。

次のオプションは、すべての SignTool コマンドに適用されます。

Global オプション 説明
/q コマンドが正常に実行した場合には何も出力されず、コマンドが失敗した場合には最小限の出力が表示されます。
/v コマンドが正常に実行したか、失敗したかにかかわらず、詳細出力と警告メッセージが表示されます。
/debug デバッグ情報を表示します。

Catdb コマンド オプション

次の表に、catdb コマンドと共に使用できるオプションを示します。

Catdb オプション 説明
/d 既定のカタログ データベースを更新するように指定します。 または /g/d使用しない場合、SignTool はシステム コンポーネントとドライバー データベースを更新します。
/gGUID GUID によって識別されるカタログ データベースを更新することを指定します。
/r 指定したカタログをカタログ データベースから削除します。 このオプションを指定しない場合、SignTool は指定したカタログをカタログ データベースに追加します。
/u 追加されたカタログ ファイルに対して、一意な名前を自動的に生成するように指定します。 必要に応じて、既存のカタログ ファイルと名前が競合しないように、カタログ ファイルの名前が変更されます。 このオプションを指定しない場合、SignTool は、指定したカタログと同じ名前の既存のカタログを上書きします。

Note

カタログ データベースは、カタログ ファイルの自動検索に使用されます。

Sign コマンド オプション

次の表に、sign コマンドと共に使用できるオプションを示します。

Sign コマンド オプション 説明
/a 最適な署名証明書を自動的に選択します。 SignTool は、指定されたすべての条件を満たすすべての有効な証明書を検索し、最も長い時間有効な証明書を選択します。 このオプションが存在しない場合、SignTool は有効な署名証明書を 1 つだけ検索することを想定しています。
/acfile ファイルから署名ブロックに別の証明書を追加します。
/as この署名を追加します。 プライマリ署名が存在しない場合、この署名は代わりにプライマリ署名になります。
/cCertTemplateName 署名証明書に対して証明書テンプレート名 (Microsoft 拡張機能) を指定します。
/cspCSPName 秘密キー コンテナーを含む暗号化サービス プロバイダー (CSP: Cryptographic Service Provider) を指定します。
/dDesc 署名された内容の説明を指定します。
/dgパス 署名するダイジェストと署名されていない PKCS7 ファイルを生成します。 出力ダイジェストと PKCS7 ファイルは Path<>\<FileName.dig><Path>\<FileName.p7u> です。 追加の XML ファイルを出力するには、 を使用します /dxml
/diパス 署名済みダイジェストを署名されていない PKCS7 ファイルに取り込んで署名を作成します。 入力署名済みダイジェストファイルと署名されていない PKCS7 ファイルは、Path>\<FileName.dig.signed> および Path\FileName.p7u にする必要があります<><><
/dlibDll ダイジェストに署名する関数を AuthenticodeDigestSign 実装する DLL を指定します。 このオプションは、、、および オプションで SignTool を個別に使用する場合/dg/ds/di同じです。 このオプションは、3 つすべてを 1 つのアトミック操作として呼び出します。
/dmdfFilename オプションと共に /dg 使用すると、ファイルの内容を変更せずに関数に AuthenticodeDigestSign 渡します。
/ds ダイジェストにのみ署名します。 入力ファイルは、 オプションによって生成されるダイジェストである /dg 必要があります。 出力ファイルは File.signed<> です
/duURL 署名された内容の詳細な説明に対する URL (Uniform Resource Locator) を指定します。
/dxml オプションと共に /dg 使用すると、XML ファイルが生成されます。 出力ファイルは Path<>\<FileName>.dig.xmlです。
/fSignCertFile ファイルの署名証明書を指定します。 ファイルが個人情報交換 (PFX: Personal Information Exchange) 形式でパスワードによって保護されている場合に、/p オプションを使用してパスワードを指定します。 ファイルに秘密キーが含まれていない場合は、 オプションと /kc オプションを/csp使用して、CSP と秘密キー コンテナー名を指定します。
/fdalg ファイルの署名の作成に使用するファイル ダイジェスト アルゴリズムを指定します。 注: 署名中に /fd オプションが指定されていない場合、コマンドはエラーを生成します。
/fd certHash 文字列 "certHash" を指定すると、コマンドは署名証明書で指定されたアルゴリズムを使用します。 注: 署名中に /fd オプションが指定されていない場合、コマンドはエラーを生成します。
/iIssuerName 署名証明書の発行者の名前を指定します。 この値には、発行者名全体の部分文字列を指定できます。
/kcPrivKeyContainerName 秘密キー コンテナー名を指定します。
/nSubjectName 署名証明書の件名を指定します。 この値には、件名全体の部分文字列を指定できます。
/nph サポートされている場合に、実行可能ファイルのページ ハッシュを抑制します。 既定値は、 SIGNTOOL_PAGE_HASHES 環境変数と wintrust.dll バージョンによって決まります。 PE ファイル以外では、このオプションは無視されます。
/pPassword PFX ファイルを開くときに使用するパスワードを指定します。 オプションを /f 使用して PFX ファイルを指定します。
/p7パス 指定する各コンテンツ ファイルについて公開キー暗号化規格 (PKCS) #7 ファイルを作成することを指定します。 PKCS #7 ファイルの名前 <は path>\<filename.p7> です
/p7ceValue 署名された PKCS#7 コンテンツのオプションを指定します。 署名されたコンテンツを PKCS #7 ファイルに埋め込む場合は に設定しDetachedSignedData、デタッチされた PKCS #7 ファイルの署名付きデータ部分を生成するには、 Embedded設定します。 オプションが /p7ce 指定されていない場合、署名されたコンテンツは既定で埋め込まれます。
/p7co<OID> 署名された PKCS#7 コンテンツを識別するオブジェクト識別子 (OID) を指定します。
/ph サポートされている場合に、実行可能ファイルのページ ハッシュを生成します。
/rRootSubjectName 署名証明書のチェーン先とするルート証明書の件名を指定します。 この値には、ルート証明書の件名全体の部分文字列を指定できます。
/sStoreName コマンドが証明書を検索するときに開くストアを指定します。 このオプションを指定しない場合、コマンドによってストアが My 開きます。
/sha1Hash 署名証明書の SHA1 ハッシュを指定します。 SHA1 ハッシュは、複数の証明書が残りのオプションで指定された条件を満たす場合に一般的に使用されます。
/sm コマンドがユーザー ストアではなくマシン ストアを使用することを指定します。
/tURL タイム スタンプ サーバーの URL を指定します。 このオプションまたは /tr が指定されていない場合、署名されたファイルにはタイムスタンプが設定されません。 タイム スタンプが失敗すると、コマンドによって警告が生成されます。 このオプションは、 オプションでは /tr 使用できません。
/tdalg /tr オプションと共に使用して、RFC 3161 タイム スタンプ サーバーで使用されるダイジェスト アルゴリズムを要求します。 注: タイム スタンプ中に が指定されていない場合 /td 、コマンドはエラーを生成します。
/trURL RFC 3161 タイム スタンプ サーバーの URL を指定します。 このオプションまたは /t が指定されていない場合、署名されたファイルにはタイムスタンプが設定されません。 タイム スタンプが失敗すると、コマンドによって警告が生成されます。 このオプションは、 オプションでは /t 使用できません。
/uUsage 署名証明書に必要な拡張キー使用法 (EKU: Enhanced Key Usage) を指定します。 使用法の値は、OID または文字列によって指定できます。 既定の使用法は Code Signing または 1.3.6.1.5.5.7.3.3です。
/uw または の使用法を Windows System Component Verification 指定します 1.3.6.1.4.1.311.10.3.6

使用例については、「Using SignTool to Sign a File」(SignTool を使用してファイルに署名する) を参照してください。

Timestamp コマンド オプション

次の表に、timestamp コマンドと共に使用できるオプションを示します。

Timestamp オプション 説明
/p7 PKCS #7 ファイルにタイム スタンプを付けます。
/tURL タイム スタンプ サーバーの URL を指定します。 タイム スタンプを付けるファイルは、事前に署名されている必要があります。 /t オプションまたは /tr オプションを指定する必要があります。
/tdalg /tr オプションと共に使用して、RFC 3161 タイム スタンプ サーバーで使用されるダイジェスト アルゴリズムを要求します。 注: タイム スタンプ中に が指定されていない場合 /td 、コマンドは警告を生成します。
/tpindex index で署名にタイム スタンプを付けます。
/trURL RFC 3161 タイム スタンプ サーバーの URL を指定します。 タイム スタンプを付けるファイルは、事前に署名されている必要があります。 /tr オプションまたは /t オプションを指定する必要があります。

コマンド オプションの確認

Verify オプション 説明
/a ファイルの検証にすべてのメソッドを使用できることを指定します。 まず、SignTool はカタログ データベースを検索して、ファイルがカタログにサインインしているかどうかを判断します。 ファイルがカタログにサインインしていない場合、SignTool はファイルの埋め込み署名の検証を試みます。 カタログにサインインしている可能性があるファイルとサインインしていないファイルを確認する場合は、このオプションをお勧めします。 署名されている場合と署名されていない可能性があるファイルの例には、Windows ファイルやドライバーが含まれます。
/ad 既定のカタログ データベースを使用してカタログを検索します。
/all 複数の署名を持つファイル内のすべての署名を検証します。
/as システム コンポーネント (ドライバー) のカタログ データベースを使用してカタログを検索します。
/agCatDBGUID GUID によって識別されるカタログ データベース内のカタログを検索します。
/cCatFile 名前でカタログ ファイルを指定します。
/d 説明と説明の URL を出力します。 Windows Vista 以前: このオプションはサポートされていません。
/dsIndex 特定の位置にある署名を検証します。
/hash{SHA1|SHA256} カタログ内のファイルを検索する場合に使用するオプションのハッシュ アルゴリズムを指定します。
/kp x64 カーネル モード ドライバー署名ポリシーを使用して検証を実行します。
/ms 複数の検証セマンティクスを使用します。 この動作は、 WinVerifyTrust 呼び出しの既定値です。
/oVersion オペレーティング システムのバージョンでファイルを確認します。 version パラメーターの形式 <は PlatformID>:<VerMajor です>。<VerMinor>。<BuildNumber>。 オプションを使用 /o することをお勧めします。 が指定されていない場合 /o 、SignTool は予期しない結果を返す可能性があります。 たとえば、 を含 /oめない場合、古いオペレーティング システムで正しく検証されるシステム カタログは、新しいオペレーティング システムでは正しく検証されない可能性があります。
/p7 PKCS #7 ファイルを確認します。 PKCS #7 検証で既存のポリシーは使用されません。 SignTool は署名を確認し、署名証明書のチェーンを構築します。
/pa 既定の認証検証ポリシーを使用することを指定します。 オプションが /pa 指定されていない場合、SignTool は Windows ドライバー検証ポリシーを使用します。 このオプションは、 オプションでは catdb 使用できません。
/pgPolicyGUID GUID により検証ポリシーを指定します。 GUID は、検証ポリシーの に ActionID 対応します。 このオプションは、 オプションでは catdb 使用できません。
/ph ページ ハッシュ値を印刷して確認します。 Windows Vista 以前: このオプションはサポートされていません。
/rRootSubjectName 署名証明書のチェーン先とするルート証明書の件名を指定します。 この値には、ルート証明書の件名全体の部分文字列を指定できます。
/tw 署名にタイムスタンプが付いていない場合に、コマンドで警告を生成することを指定します。

SignTool verify コマンドは、署名証明書が信頼された機関によって発行されたかどうか、署名証明書が取り消されたかどうか、および必要に応じて、署名証明書が特定のポリシーに対して有効かどうかを判断します。

SignTool verify コマンドは、 などの/c/a/ad/as/agカタログを検索するオプションが指定されていない限り、埋め込み署名の状態を出力します。

戻り値

SignTool は、終了時に次のいずれかの終了コードを返します。

終了コード 説明
0 実行に成功しました。
1 実行に失敗しました。
2 実行は完了しましたが、警告があります。

使用例

次のコマンドは、システム コンポーネントとドライバー データベースに MyCatalogFileName.cat カタログ ファイルを追加します。 オプションは /u 、必要に応じて一意の名前を生成し、 MyCatalogFileName.cat という名前の既存のカタログ ファイルを置き換えないようにします。

signtool catdb /v /u MyCatalogFileName.cat

最適な証明書を使用してファイルに自動的に署名するコマンドを次に示します。

signtool sign /a /fd SHA256 MyFile.exe 

パスワードで保護された PFX ファイルに格納されている証明書を使用してファイルにデジタル署名するコマンドを次に示します。

signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe 

次のコマンドは、ファイルにデジタル署名し、タイムスタンプを設定します。 ファイルへの署名に使用する証明書は、PFX ファイルに格納されています。

signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe 

My ストアにある件名が My Company Certificate の証明書を使用してファイルに署名するコマンドを次に示します。

signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe 

次のコマンドは、ActiveX コントロールに署名し、ユーザーがコントロールのインストールを求められたときにブラウザーに表示される情報を提供します。

signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe 

次のコマンドは、既にデジタル署名されているファイルにタイムスタンプを付けます。

signtool timestamp /t http://timestamp.digicert.com MyFile.exe

次のコマンドは、RFC 3161 タイム スタンプ サーバーを使用してファイルにタイムスタンプを設定します。

signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe

ファイルが署名済みであることを検証するコマンドを次に示します。

signtool verify MyFile.exe

次のコマンドは、カタログにサインインできるシステム ファイルを確認します。

signtool verify /a SystemFile.dll

MyCatalog.cat という名前のカタログで署名されているシステム ファイルを検証するコマンドを次に示します。

signtool verify /c MyCatalog.cat SystemFile.dll