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 の一部として使用できますhttps://developer.microsoft.com/windows/downloads/windows-10-sdk/

Note

Windows 10 SDK、Windows 10 HLK、Windows 10 WDK、および Windows 10 ADK ビルド 20236 以降の場合、ダイジェスト アルゴリズムを指定する必要があります。 SignTool sign コマンドでは、ファイル ダイジェスト アルゴリズム/tdタイムスタンプ ダイジェスト アルゴリズム オプションをそれぞれ署名時とタイムスタンプ時に指定する必要/fdがあります。 署名時に /fd が指定されていない場合、およびタイムスタンプ時に /td が指定されていない場合は、警告 (エラー コード 0、初期) がスローされます。 SignTool の以降のバージョンでは、警告がエラーになります。 SHA256 が推奨され、業界によって SHA1 より安全であると見なされています。

構文

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

パラメーター

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

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

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

次のオプションは、すべての署名ツール コマンドに適用されます。

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

 

Catdb コマンド オプション

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

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

Note

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

Sign コマンド オプション

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

Sign コマンド オプション 説明
/a 最適な署名証明書を自動的に選択します。 署名ツールは、指定されたすべての条件を満たす有効な証明書をすべて検出し、最も長い期間有効である証明書を選択します。 このオプションが指定されていない場合、署名ツールは有効な署名証明書を 1 つだけ検索することが前提とします。
/acfile file から署名ブロックに証明書を追加します。
/as この署名を追加します。 プライマリ署名が存在しない場合、この署名がプライマリ署名になります。
/cCertTemplateName 署名証明書に対して証明書テンプレート名 (Microsoft 拡張機能) を指定します。
/cspCSPName 秘密キー コンテナーを含む暗号化サービス プロバイダー (CSP: Cryptographic Service Provider) を指定します。
/dDesc 署名された内容の説明を指定します。
/dgパス 署名するダイジェストと署名されていない PKCS7 ファイルを生成します。 出力ダイジェストと PKCS7 ファイルは、 Path\FileName.digPath\FileName.p7u になります。 追加の XML ファイルを出力するには、 /dxml を参照してください。
/diパス 署名付きダイジェストを署名されていない PKCS7 ファイルに取り込むことで署名を作成します。 入力署名済みダイジェストファイルと署名されていない PKCS7 ファイルは、 Path\FileName.dig.signed および Path\FileName.p7u である必要があります。
/dlibDLL ダイジェストに署名する関数を AuthenticodeDigestSign 実装する DLL を指定します。 このオプションは、/dg/ds、および /di スイッチで SignTool を個別に使用することと同じですが、このオプションでは 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 オプションを使用してパスワードを指定します。 ファイルに秘密キーが含まれていない場合、/csp および /kc オプションを使用して、CSP と秘密キー コンテナー名を指定します。
/fdAlg ファイルの署名の作成に使用するファイル ダイジェスト アルゴリズムを指定します。
メモ: 署名中に /fd スイッチが指定されていない場合は、エラーが生成されます。
/fdcertHash 文字列 certHash を指定すると、既定でそのアルゴリズムが署名証明書に使用されるようになります。
メモ: 署名中に /fd スイッチが指定されていない場合は、エラーが生成されます。
/iIssuerName 署名証明書の発行者の名前を指定します。 この値には、発行者名全体の部分文字列を指定できます。
/kcPrivKeyContainerName 秘密キー コンテナー名を指定します。
/nSubjectName 署名証明書の件名を指定します。 この値には、件名全体の部分文字列を指定できます。
/nph サポートされている場合に、実行可能ファイルのページ ハッシュを抑制します。 既定値は、SIGNTOOL_PAGE_HASHES 環境変数と wintrust.dll のバージョンによって決定されます。 PE ファイル以外では、このオプションは無視されます。
/pPassword PFX ファイルを開くときに使用するパスワードを指定します。 PFX ファイルを指定するには、/f オプションを使用します。
/p7パス 指定する各コンテンツ ファイルについて公開キー暗号化規格 (PKCS) #7 ファイルを作成することを指定します。 PKCS #7 ファイルの名前は path\filename.p7 です。
/p7ce 署名された PKCS#7 コンテンツのオプションを指定します。 署名されたコンテンツを PKCS #7 ファイルに埋め込む場合は Value を "Embedded" に設定し、デタッチされた PKCS #7 ファイルの署名されたデータ部分を作成する場合には "DetachedSignedData" に設定します。 /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 はファイルの埋め込み署名の検証を試みます。 カタログで署名されているファイルまたは署名されていないファイルを検証するときには、このオプションをお勧めします。 署名される可能性があるファイルや署名されていないファイルの例としては、Windowsファイルやドライバーなどがあります。
/ad 既定のカタログ データベースを使用してカタログを検索します。
/all 複数の署名を持つファイル内のすべての署名を検証します。
/as システム コンポーネント (ドライバー) のカタログ データベースを使用してカタログを検索します。
/agCatDBGUID GUID によって識別されるカタログ データベース内のカタログを検索します。
/cCatFile 名前でカタログ ファイルを指定します。
/d 説明と説明の URL を印刷します。
Windows Vista 以前: このフラグはサポートされていません。
/dsIndex 特定の位置にある署名を確認します。
/hash{SHA1SHA256|} カタログ内のファイルを検索する場合に使用するオプションのハッシュ アルゴリズムを指定します。
/kp x64 カーネル モード ドライバー署名ポリシーを使用して検証を実行します。
/ms 複数の検証セマンティクスを使用します。 これは 、WinVerifyTrust 呼び出しの既定の動作です。
/oVersion オペレーティング システムのバージョンでファイルを確認します。 version パラメーターは次の形式です。
PlatformID**:VerMajorVerMinor.**BuildNumber
/o スイッチの使用をお勧めします。 /o が指定されていない場合、SignTool は予期しない結果を返す可能性があります。 たとえば、 /o スイッチを含まない場合、古い OS で正しく検証されるシステム カタログが、新しい OS で正しく検証されない場合があります。
/p7 PKCS #7 ファイルを確認します。 PKCS #7 検証で既存のポリシーは使用されません。 署名がチェックされ、署名証明書のチェーンがビルドされます。
/pa 既定の認証検証ポリシーを使用することを指定します。 /pa オプションが指定されていない場合、SignTool は Windows ドライバー検証ポリシーを使用します。 このオプションは、 catdb オプションでは使用できません。
/pgPolicyGUID GUID で検証ポリシーを指定 しますGUID は、検証ポリシーの ActionID に対応します。 このオプションは、 catdb オプションでは使用できません。
/ph ページ ハッシュ値を印刷して確認します。
Windows Vista 以前: このフラグはサポートされていません。
/rRootSubjectName 署名証明書のチェーン先とするルート証明書の件名を指定します。 この値には、ルート証明書の件名全体の部分文字列を指定できます。
/tw 署名にタイムスタンプが設定されていない場合に警告を生成することを指定します。

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

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

戻り値

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

終了コード 説明
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 コントロールに署名して、ユーザーがコントロールをインストールするように求められるときに Internet Explorer に表示される情報を指定するコマンドを次に示します。

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