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

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_KEY と ACCESS_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空出力ファイルのパス。空にして上書きを有効にしない場合、デフォルトのファイル名が自動生成されます。
--override—false出力ファイルで元のファイルを上書きします。
--sha1-1falseSHA1 署名を有効にします。
--sha2-2trueSHA2 署名を有効にします。
--timestamp—autoSHA1 Authenticode タイムスタンプアドレス。auto はデフォルトアドレスを使用し、空文字列で無効化。
--timestamp-rfc3161—autoSHA2 RFC3161 タイムスタンプアドレス。auto はデフォルトアドレスを使用し、空文字列で無効化。
--desc-n空署名に書き込むプログラム説明テキスト。
--url-u空署名済みのプログラム情報URLを書き込みます。
--nest—true既存の署名を保持し、ネスト署名を追加します;false の場合、既存の署名をクリアします。
--verify—false署名を追加する際、証明書が信頼されていない場合はエラーを返します。
--dry-run—falseローカルテスト証明書を使用して署名を生成し、リモート署名APIを呼び出しません。
ブール値パラメータの形式

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

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

必須ルール​

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

  • --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-rfc3161 の auto 値は、検証段階でデフォルトアドレスに置き換えられます:

パラメータ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 を変更してください。