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

signtool ksp と Windows KSP の統合

signtool ksp は Windows sslTrus Key Storage Provider(KSP)を管理します。KSP のインストールと設定が完了すると、Microsoft signtool.exe は CNG Provider を介してリモート署名サービスを呼び出せるようになり、ローカルに秘密鍵を保持する必要がなくなります。

注意

signtool ksp のすべてのサブコマンドは Windows プラットフォームのみをサポートしています。Windows 以外のプラットフォームで任意の ksp サブコマンドを実行すると、以下が返されます: key storage provider is only supported on windows


サブコマンドの概要

signtool ksp [command]
サブコマンド用途
installKSP DLL をインストールして登録する
uninstallKSP の登録を解除し、DLL を削除する
list保存済みの KSP 鍵設定を一覧表示する
addKSP 鍵設定を新規追加する(対話式)
del指定した KSP 鍵設定を削除する(対話式)
説明

--address パラメータは ksp add の場合にのみ有効で、証明書PEMを取得しリモートサービスアドレスを保存するために使用されます。


KSP をインストールする

signtool ksp install

実行後:

  1. 埋め込まれた sslTrusKSP.dllProgramData/sslTrusKSP/sslTrusKSP.dll に書き込みます。
  2. ProgramData 内の DLL のバージョンが System32 内のものと異なる場合、DLL を System32 にコピーします。
  3. CNG Provider を登録します:sslTrus Key Storage Provider
  4. KSP 設定ファイル ProgramData/sslTrusKSP/config.dat を保存します(DPAPI 暗号化)。
注意

install はシステムレベルの CNG Provider 登録を変更するため、管理者権限のターミナルで実行することを推奨します。DLL のバージョンが同一であることが検出された場合、ksp is already installed を記録してそのまま終了します。


KSP のアンインストール

signtool ksp uninstall

実行後:

  1. CNG Providerの登録を解除します:sslTrus Key Storage Provider
  2. ProgramData/sslTrusKSP/sslTrusKSP.dllを削除します。
  3. System32内のsslTrusKSP.dllを削除します。
説明

uninstallProgramData/sslTrusKSPディレクトリ全体を削除しません。保存済みのconfig.dat、証明書ファイルおよびログは手動でクリーンアップする必要があります。


鍵設定の確認

signtool ksp list

出力フィールドの説明:

フィールド説明
Noシリアル番号
CertCode証明書番号
ServerUrlnicsrs または default として表示
AccessKeyAccess Key
AccessSecretマスキング処理された Access Secret
説明
  • 設定ファイルが存在しない場合、no ksp configuration を返します。
  • 設定は存在するが鍵リストが空の場合、no ksp key を記録します。
  • AccessSecret はマスキング表示しますが、設定ファイル自体は引き続き機密ファイルとして管理する必要があります。

鍵設定の追加

signtool ksp add

NICSRS アドレスの指定:

signtool ksp add --address nicsrs

コマンドは対話式で、以下を順に入力します:

Please enter the access key: your-access-key
Please enter the access secret: your-access-secret
Please enter the certificate code: CERT_CODE

実行後:

  1. リモートの /v1/codesign/cert を呼び出して証明書のPEMを取得します。
  2. 証明書を ProgramData/sslTrusKSP/CERT_CODE.crt として保存します。
  3. 鍵設定を ProgramData/sslTrusKSP/config.dat に書き込みます(DPAPI暗号化)。

証明書番号が既に存在する場合、以下のメッセージが表示されます:

The certificate code already exists, do you want to override it? [y/N]

y を入力して上書きします。その他の値を入力するか、そのまま Enter キーを押すと破棄されます。

注意

ksp add は対話型コマンドです。現在、--access-key--cert-code などの非対話型パラメーターはサポートされていません。設定を追加するとリモートAPIにアクセスし、証明書PEMをローカルのProgramDataに書き込みます。


鍵設定の削除

signtool ksp del

証明書番号を対話形式で入力してください:

Please enter the certificate code: CERT_CODE

実行後、config.dat から一致する鍵設定を削除し、暗号化された設定ファイルを再度保存します。

説明

現在の実装では設定項目のみを削除し、ProgramData/sslTrusKSP/CERT_CODE.crt 証明書ファイルは削除されません。


KSP 経由での Microsoft signtool.exe の使用

KSP の設定が完了したら、Windows SDK に含まれる Microsoft signtool.exe を使用して Provider を呼び出します。

注意

以下のコマンド内の signtool.exeMicrosoft Windows SDK 標準搭載のツールであり、sslTrus CLI ではありません。現在のディレクトリまたは PATH に両方が存在する場合は、Windows SDK 内の signtool.exe の完全パスを使用して混同を避けてください。

SHA256 署名の例:

signtool.exe sign /v ^
/csp "sslTrus Key Storage Provider" ^
/kc CERT_CODE ^
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt ^
/fd SHA256 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
.\EXAMPLE.exe

SHA1署名追加の例:

signtool.exe sign /v ^
/csp "sslTrus Key Storage Provider" ^
/kc CERT_CODE ^
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt ^
/fd SHA1 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
/as ^
.\EXAMPLE.exe

パラメータの説明:

パラメータ意味
/csp "sslTrus Key Storage Provider"sslTrusのインストール先となるKSP Providerを指定します
/kc CERT_CODEKSPの鍵名を指定します。証明書番号とすることが規約です
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crtksp add で保存される証明書ファイルを指定します
/fd SHA256 または /fd SHA1ファイルダイジェストアルゴリズム
/tr <url>RFC3161タイムスタンプサービス
/td SHA256タイムスタンプダイジェストアルゴリズム
/as署名を追加し、既存の署名は上書きしません

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

エラーメッセージ考えられる原因対処方法
key storage provider is only supported on windowsWindows 以外のプラットフォームで ksp コマンドを実行しました。KSP 操作は Windows でのみ実行してください。
no ksp configurationKSP 設定ファイルがまだ作成されていません。先に signtool ksp installsigntool ksp add を実行してください。
no such certificate code削除対象の証明書番号が存在しません。signtool ksp list を使用して証明書番号を確認してください。

セキュリティに関する注意事項

  • signtool ksp installsigntool ksp uninstall はWindowsシステムディレクトリとCNG Providerの登録を変更するため、通常は管理者権限が必要です。
  • signtool ksp add はリモート証明書インターフェースにアクセスし、証明書ファイルと暗号化設定をProgramData/sslTrusKSPに書き込みます。
  • Access Secret、KSP設定ファイル、ローカルログはいずれも機密情報として扱い、ログやバージョン管理リポジトリに書き込まないでください。