メインコンテンツまでスキップ

signtool sign コマンドリファレンス

説明

このドキュメントにおける signtool はsslTrusリモートコード署名クライアントCLIを指し、Microsoft Windows SDKに付属の signtool.exe ではありません。Windows SDKツールを使用する場合は、Microsoft signtool.exe と明記します。

signtool sign はローカルファイルに対して直接リモート署名を実行します。CLIはローカルで署名対象データを抽出し、リモートサービスを呼び出して秘密鍵による署名を完了させた後、署名、タイムスタンプ、証明書情報を出力ファイルに書き戻します。

signtool sign [flags]

ヘルプとバージョンを表示:

signtool --help
signtool --version

認証情報の設定

sign コマンドは以下の方法でアクセス認証情報を読み取ります:

認証情報項目パラメータ環境変数説明
Access Key--access-key / -kACCESS_KEYパラメータが空の場合、環境変数を自動的に読み取ります
Access Secret--access-secret / -sACCESS_SECRETパラメータが空の場合、環境変数を自動的に読み取ります
export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"

リモートサービスアドレス--address パラメータで制御され、以下の値をサポートしています:

パラメータ値実際のサービスアドレス
nicsrshttps://ssl.face.nicsrs.com
空値、racent またはその他の任意の値https://ssl.face.racent.com
注意
  • ACCESS_KEYACCESS_SECRET が実際に読み取られる環境変数名です。SIGNTOOL_ACCESS_KEY / SIGNTOOL_ACCESS_SECRET は現在のCLIによって自動的に読み取られることはありません。
  • Access Secretをシェル履歴やスクリプトリポジトリに書き込むことは推奨されません。実行時に注入される環境変数または安全なCI変数を優先的に使用してください。

パラメータの説明

パラメータ省略形デフォルト値説明
--address-aリモートサービスアドレスの識別子であり、URLパススルーパラメータではありません。
--access-key-k空の場合は ACCESS_KEY を読み取ります。
--access-secret-s空の場合は ACCESS_SECRET を読み取ります。
--cert-code-c必須。証明書番号です。
--file-f必須。署名対象ファイルのパス。ディレクトリは指定できません。
--out-o出力ファイルのパス。空欄で上書きが有効になっていない場合、デフォルトのファイル名が自動生成されます。
--overridefalse出力ファイルで元のファイルを上書きします。
--sha1-1falseSHA1署名を有効にします。
--sha2-2trueSHA2署名を有効にします。
--timestampautoSHA1 Authenticode タイムスタンプアドレス。auto はデフォルトアドレスを使用し、空文字列の場合は無効になります。
--timestamp-rfc3161autoSHA2 RFC3161 タイムスタンプアドレス。auto はデフォルトアドレスを使用し、空文字列の場合は無効になります。
--desc-n署名に書き込むプログラムの説明テキスト。
--url-u署名を書き込むプログラム情報のURL。
--nesttrue既存の署名を保持したままネスト署名を追加します。false の場合は既存の署名を消去します。
--verifyfalse署名追加時に証明書が信頼されていない場合はエラーを返します。
--dry-runfalseローカルのテスト証明書を使用して署名を生成し、リモート署名インターフェースを呼び出しません。
ブール値パラメータの形式

ブールパラメータは必ず 参数=值 形式を使用する必要があり、スペース区切りはサポートされません:

  • 正しい例:--sha1=true --sha2=false
  • 誤った例:--sha1 true --sha2 false

必須ルール

実行前に以下の条件が検証され、いずれか1つでも満たされない場合はエラーが発生して終了します:

  • --access-key または ACCESS_KEY が存在する必要があります。
  • --access-secret または ACCESS_SECRET が存在する必要があります。
  • --cert-code が存在する必要があります。
  • --file が存在する必要があり、ディレクトリであってはなりません。
  • --sha1--sha2 のうち、少なくとも1つが有効になっている必要があります。

出力ファイルルール

--out が指定されていない場合:

--override出力動作
false(デフォルト)入力ファイルと同じディレクトリに出力し、ファイル名は ${name}.signed.${yyyyMMdd.HHmmss}${ext}
true入力ファイルを直接上書き

例:

app.exe    → app.signed.20260611.153000.exe
driver.sys → driver.signed.20260611.153000.sys
注意

--override=true は元のファイルを上書きします。実行する前に必ずバックアップを作成してください。署名に失敗した場合、CLIは可能な限り未完了の出力ファイルを削除します。


アルゴリズムの選択

デフォルトではSHA2のみが有効になっています:

signtool sign -c CERT_CODE -f app.exe

SHA1 のみに署名:

signtool sign -c CERT_CODE -f app.exe --sha1=true --sha2=false

SHA1とSHA2で同時に署名する:

signtool sign -c CERT_CODE -f app.exe --sha1=true --sha2=true
説明

SHA1とSHA2を同時に有効化した場合、処理フローは先にSHA1を処理し、その後SHA2を処理します。SHA1は現在もサポートされていますが、新規の署名シナリオではSHA2の使用が優先されます。


タイムスタンプ設定

--timestamp--timestamp-rfc3161auto 値は、検証フェーズでデフォルトアドレスに置き換えられます:

パラメータauto 実際の値用途
--timestamphttp://timestamp.sectigo.comSHA1 Authenticode タイムスタンプ
--timestamp-rfc3161http://timestamp.sectigo.comSHA2 RFC3161 タイムスタンプ

カスタムSHA2タイムスタンプサービス:

signtool sign \
-c CERT_CODE \
-f app.exe \
--timestamp-rfc3161=http://timestamp.acs.microsoft.com

SHA2 タイムスタンプを無効にする:

signtool sign -c CERT_CODE -f app.exe --timestamp-rfc3161=

すべてのタイムスタンプを閉じる:

signtool sign -c CERT_CODE -f app.exe --timestamp= --timestamp-rfc3161=
説明
  • http で始まるタイムスタンプアドレスのみが使用されます。
  • SHA1 では優先的に --timestamp を使用します;これが HTTP アドレスでない場合は、--timestamp-rfc3161 の使用を試みます。
  • SHA2 では --timestamp-rfc3161 を使用します。
  • SHA2 でのタイムスタンプ追加に失敗した場合、Microsoft と Sectigo のデフォルトアドレスの間で自動的に1回再試行されます。
  • タイムスタンプの失敗が必ずしも署名の失敗につながるわけではなく、CLI はエラーを記録し、タイムスタンプの付与されていない署名結果を保持します。

よく使われる例

環境変数で資格情報を指定し、デフォルトの SHA2 署名を使用する:

export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"

signtool sign \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe

パラメータを使用して直接資格情報を提供する:

signtool sign \
--access-key "your-access-key" \
--access-secret "your-access-secret" \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe

NICSRS アドレスを使用する:

signtool sign \
--address nicsrs \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe

プログラムの説明と公式サイトURLを入力してください:

signtool sign \
-c CERT_CODE \
-f app-unsigned.exe \
-o app-signed.exe \
--desc "Example Application" \
--url "https://example.com"

ネストされた署名の追加(既存の署名を保持):

signtool sign -c CERT_CODE -f app.exe --nest=true

元のファイルを上書き:

signtool sign -c CERT_CODE -f app.exe --override=true

dry-run ローカル試用署名(リモートインターフェースを呼び出しません):

signtool sign \
-k dummy \
-s dummy \
-c CERT_CODE \
-f app.exe \
--dry-run=true
説明

--dry-run はリモート署名インターフェースを呼び出しませんが、ローカルファイルの読み書きとローカルの自己署名証明書の呼び出しは引き続き行われます。現在も資格情報と証明書番号の空でないことのチェックが実行されるため、例ではプレースホルダーの資格情報を使用しています。


トラブルシューティングリファレンス

エラーメッセージ考えられる原因対処方法
access key is required...--access-key が渡されておらず、ACCESS_KEY も設定されていません。環境変数を設定するか、-k を使用してください。
access secret is required...--access-secret が渡されておらず、ACCESS_SECRET も設定されていません。環境変数を設定するか、-s を使用してください。
cert code is required...証明書番号が渡されていません。-c CERT_CODE を使用してください。
sha1 or sha2 is required...SHA1 と SHA2 が両方とも無効になっています。少なくとも1つのアルゴリズムを有効にしてください。
file <path> is a directory--file がファイルではなくディレクトリを指しています。署名対象ファイルのパスに変更してください。
タイムスタンプは失敗しましたが、署名ファイルは生成されましたタイムスタンプサービスが利用できないか、証明書チェーンの検証に失敗しました。タイムスタンプURLを確認し、必要に応じて --timestamp-rfc3161 を変更してください。