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 / -k | ACCESS_KEY | パラメータが空の場合、環境変数を自動的に読み取ります |
| Access Secret | --access-secret / -s | ACCESS_SECRET | パラメータが空の場合、環境変数を自動的に読み取ります |
export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"
远程サービスアドレスは --address パラメータによって制御され、以下の値をサポートします:
| パラメータ値 | 実際のサービスアドレス |
|---|---|
nicsrs | https://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 | -1 | false | SHA1 署名を有効にします。 |
--sha2 | -2 | true | SHA2 署名を有効にします。 |
--timestamp | — | auto | SHA1 Authenticode タイムスタンプアドレス。auto はデフォルトアドレスを使用し、空文字列で無効化。 |
--timestamp-rfc3161 | — | auto | SHA2 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 実際の値 | 用途 |
|---|---|---|
--timestamp | http://timestamp.sectigo.com | SHA1 Authenticode タイムスタンプ |
--timestamp-rfc3161 | http://timestamp.sectigo.com | SHA2 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 を変更してください。 |