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 つのコマンドのいずれか: catdb 、 sign 、 timestamp 、または 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 はシステム コンポーネントとドライバー データベースを更新します。 |
/g GUID |
GUID によって識別されるカタログ データベースを更新することを指定します。 |
/r |
指定したカタログをカタログ データベースから削除します。 このオプションを指定しない場合、SignTool は指定したカタログをカタログ データベースに追加します。 |
/u |
追加されたカタログ ファイルに対して、一意な名前を自動的に生成するように指定します。 必要に応じて、既存のカタログ ファイルと名前が競合しないように、カタログ ファイルの名前が変更されます。 このオプションを指定しない場合、SignTool は、指定したカタログと同じ名前の既存のカタログを上書きします。 |
Note
カタログ データベースは、カタログ ファイルの自動検索に使用されます。
Sign コマンド オプション
次の表に、sign
コマンドと共に使用できるオプションを示します。
Sign コマンド オプション | 説明 |
---|---|
/a |
最適な署名証明書を自動的に選択します。 SignTool は、指定されたすべての条件を満たすすべての有効な証明書を検索し、最も長い時間有効な証明書を選択します。 このオプションが存在しない場合、SignTool は有効な署名証明書を 1 つだけ検索することを想定しています。 |
/ac file |
ファイルから署名ブロックに別の証明書を追加します。 |
/as |
この署名を追加します。 プライマリ署名が存在しない場合、この署名は代わりにプライマリ署名になります。 |
/c CertTemplateName |
署名証明書に対して証明書テンプレート名 (Microsoft 拡張機能) を指定します。 |
/csp CSPName |
秘密キー コンテナーを含む暗号化サービス プロバイダー (CSP: Cryptographic Service Provider) を指定します。 |
/d Desc |
署名された内容の説明を指定します。 |
/dg パス |
署名するダイジェストと署名されていない PKCS7 ファイルを生成します。 出力ダイジェストと PKCS7 ファイルは Path<>\<FileName.dig> と <Path>\<FileName.p7u> です。 追加の XML ファイルを出力するには、 を使用します /dxml 。 |
/di パス |
署名済みダイジェストを署名されていない PKCS7 ファイルに取り込んで署名を作成します。 入力署名済みダイジェストファイルと署名されていない PKCS7 ファイルは、Path>\<FileName.dig.signed> および Path\FileName.p7u にする必要があります<。><>< |
/dlib Dll |
ダイジェストに署名する関数を AuthenticodeDigestSign 実装する DLL を指定します。 このオプションは、、、および オプションで SignTool を個別に使用する場合/dg /ds と/di 同じです。 このオプションは、3 つすべてを 1 つのアトミック操作として呼び出します。 |
/dmdf Filename |
オプションと共に /dg 使用すると、ファイルの内容を変更せずに関数に AuthenticodeDigestSign 渡します。 |
/ds |
ダイジェストにのみ署名します。 入力ファイルは、 オプションによって生成されるダイジェストである /dg 必要があります。 出力ファイルは File.signed<> です。 |
/du URL |
署名された内容の詳細な説明に対する URL (Uniform Resource Locator) を指定します。 |
/dxml |
オプションと共に /dg 使用すると、XML ファイルが生成されます。 出力ファイルは Path<>\<FileName>.dig.xmlです。 |
/f SignCertFile |
ファイルの署名証明書を指定します。 ファイルが個人情報交換 (PFX: Personal Information Exchange) 形式でパスワードによって保護されている場合に、/p オプションを使用してパスワードを指定します。 ファイルに秘密キーが含まれていない場合は、 オプションと /kc オプションを/csp 使用して、CSP と秘密キー コンテナー名を指定します。 |
/fd alg |
ファイルの署名の作成に使用するファイル ダイジェスト アルゴリズムを指定します。 注: 署名中に /fd オプションが指定されていない場合、コマンドはエラーを生成します。 |
/fd certHash |
文字列 "certHash" を指定すると、コマンドは署名証明書で指定されたアルゴリズムを使用します。 注: 署名中に /fd オプションが指定されていない場合、コマンドはエラーを生成します。 |
/i IssuerName |
署名証明書の発行者の名前を指定します。 この値には、発行者名全体の部分文字列を指定できます。 |
/kc PrivKeyContainerName |
秘密キー コンテナー名を指定します。 |
/n SubjectName |
署名証明書の件名を指定します。 この値には、件名全体の部分文字列を指定できます。 |
/nph |
サポートされている場合に、実行可能ファイルのページ ハッシュを抑制します。 既定値は、 SIGNTOOL_PAGE_HASHES 環境変数と wintrust.dll バージョンによって決まります。 PE ファイル以外では、このオプションは無視されます。 |
/p Password |
PFX ファイルを開くときに使用するパスワードを指定します。 オプションを /f 使用して PFX ファイルを指定します。 |
/p7 パス |
指定する各コンテンツ ファイルについて公開キー暗号化規格 (PKCS) #7 ファイルを作成することを指定します。 PKCS #7 ファイルの名前 <は path>\<filename.p7> です。 |
/p7ce Value |
署名された PKCS#7 コンテンツのオプションを指定します。 署名されたコンテンツを PKCS #7 ファイルに埋め込む場合は に設定しDetachedSignedData 、デタッチされた PKCS #7 ファイルの署名付きデータ部分を生成するには、 にEmbedded 設定します。 オプションが /p7ce 指定されていない場合、署名されたコンテンツは既定で埋め込まれます。 |
/p7co <OID> |
署名された PKCS#7 コンテンツを識別するオブジェクト識別子 (OID) を指定します。 |
/ph |
サポートされている場合に、実行可能ファイルのページ ハッシュを生成します。 |
/r RootSubjectName |
署名証明書のチェーン先とするルート証明書の件名を指定します。 この値には、ルート証明書の件名全体の部分文字列を指定できます。 |
/s StoreName |
コマンドが証明書を検索するときに開くストアを指定します。 このオプションを指定しない場合、コマンドによってストアが My 開きます。 |
/sha1 Hash |
署名証明書の SHA1 ハッシュを指定します。 SHA1 ハッシュは、複数の証明書が残りのオプションで指定された条件を満たす場合に一般的に使用されます。 |
/sm |
コマンドがユーザー ストアではなくマシン ストアを使用することを指定します。 |
/t URL |
タイム スタンプ サーバーの URL を指定します。 このオプションまたは /tr が指定されていない場合、署名されたファイルにはタイムスタンプが設定されません。 タイム スタンプが失敗すると、コマンドによって警告が生成されます。 このオプションは、 オプションでは /tr 使用できません。 |
/td alg |
/tr オプションと共に使用して、RFC 3161 タイム スタンプ サーバーで使用されるダイジェスト アルゴリズムを要求します。 注: タイム スタンプ中に が指定されていない場合 /td 、コマンドはエラーを生成します。 |
/tr URL |
RFC 3161 タイム スタンプ サーバーの URL を指定します。 このオプションまたは /t が指定されていない場合、署名されたファイルにはタイムスタンプが設定されません。 タイム スタンプが失敗すると、コマンドによって警告が生成されます。 このオプションは、 オプションでは /t 使用できません。 |
/u Usage |
署名証明書に必要な拡張キー使用法 (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 ファイルにタイム スタンプを付けます。 |
/t URL |
タイム スタンプ サーバーの URL を指定します。 タイム スタンプを付けるファイルは、事前に署名されている必要があります。 /t オプションまたは /tr オプションを指定する必要があります。 |
/td alg |
/tr オプションと共に使用して、RFC 3161 タイム スタンプ サーバーで使用されるダイジェスト アルゴリズムを要求します。 注: タイム スタンプ中に が指定されていない場合 /td 、コマンドは警告を生成します。 |
/tp index |
index で署名にタイム スタンプを付けます。 |
/tr URL |
RFC 3161 タイム スタンプ サーバーの URL を指定します。 タイム スタンプを付けるファイルは、事前に署名されている必要があります。 /tr オプションまたは /t オプションを指定する必要があります。 |
コマンド オプションの確認
Verify オプション | 説明 |
---|---|
/a |
ファイルの検証にすべてのメソッドを使用できることを指定します。 まず、SignTool はカタログ データベースを検索して、ファイルがカタログにサインインしているかどうかを判断します。 ファイルがカタログにサインインしていない場合、SignTool はファイルの埋め込み署名の検証を試みます。 カタログにサインインしている可能性があるファイルとサインインしていないファイルを確認する場合は、このオプションをお勧めします。 署名されている場合と署名されていない可能性があるファイルの例には、Windows ファイルやドライバーが含まれます。 |
/ad |
既定のカタログ データベースを使用してカタログを検索します。 |
/all |
複数の署名を持つファイル内のすべての署名を検証します。 |
/as |
システム コンポーネント (ドライバー) のカタログ データベースを使用してカタログを検索します。 |
/ag CatDBGUID |
GUID によって識別されるカタログ データベース内のカタログを検索します。 |
/c CatFile |
名前でカタログ ファイルを指定します。 |
/d |
説明と説明の URL を出力します。 Windows Vista 以前: このオプションはサポートされていません。 |
/ds Index |
特定の位置にある署名を検証します。 |
/hash {SHA1|SHA256} |
カタログ内のファイルを検索する場合に使用するオプションのハッシュ アルゴリズムを指定します。 |
/kp |
x64 カーネル モード ドライバー署名ポリシーを使用して検証を実行します。 |
/ms |
複数の検証セマンティクスを使用します。 この動作は、 WinVerifyTrust 呼び出しの既定値です。 |
/o Version |
オペレーティング システムのバージョンでファイルを確認します。 version パラメーターの形式 <は PlatformID>:<VerMajor です>。<VerMinor>。<BuildNumber>。 オプションを使用 /o することをお勧めします。 が指定されていない場合 /o 、SignTool は予期しない結果を返す可能性があります。 たとえば、 を含 /o めない場合、古いオペレーティング システムで正しく検証されるシステム カタログは、新しいオペレーティング システムでは正しく検証されない可能性があります。 |
/p7 |
PKCS #7 ファイルを確認します。 PKCS #7 検証で既存のポリシーは使用されません。 SignTool は署名を確認し、署名証明書のチェーンを構築します。 |
/pa |
既定の認証検証ポリシーを使用することを指定します。 オプションが /pa 指定されていない場合、SignTool は Windows ドライバー検証ポリシーを使用します。 このオプションは、 オプションでは catdb 使用できません。 |
/pg PolicyGUID |
GUID により検証ポリシーを指定します。 GUID は、検証ポリシーの に ActionID 対応します。 このオプションは、 オプションでは catdb 使用できません。 |
/ph |
ページ ハッシュ値を印刷して確認します。 Windows Vista 以前: このオプションはサポートされていません。 |
/r RootSubjectName |
署名証明書のチェーン先とするルート証明書の件名を指定します。 この値には、ルート証明書の件名全体の部分文字列を指定できます。 |
/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
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示