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]
| サブコマンド | 用途 |
|---|---|
install | KSP DLL をインストールして登録する |
uninstall | KSP の登録を解除し、DLL を削除する |
list | 保存済みの KSP 鍵設定を一覧表示する |
add | KSP 鍵設定を新規追加する(対話式) |
del | 指定した KSP 鍵設定を削除する(対話式) |
--address パラメータは ksp add の場合にのみ有効で、証明書PEMを取得しリモートサービスアドレスを保存するために使用されます。
KSP をインストールする
signtool ksp install
実行後:
- 埋め込まれた
sslTrusKSP.dllをProgramData/sslTrusKSP/sslTrusKSP.dllに書き込みます。 - ProgramData 内の DLL のバージョンが System32 内のものと異なる場合、DLL を System32 にコピーします。
- CNG Provider を登録します:
sslTrus Key Storage Provider。 - KSP 設定ファイル
ProgramData/sslTrusKSP/config.datを保存します(DPAPI 暗号化)。
install はシステムレベルの CNG Provider 登録を変更するため、管理者権限のターミナルで実行することを推奨します。DLL のバージョンが同一であることが検出された場合、ksp is already installed を記録してそのまま終了します。
KSP のアンインストール
signtool ksp uninstall
実行後:
- CNG Providerの登録を解除します:
sslTrus Key Storage Provider。 ProgramData/sslTrusKSP/sslTrusKSP.dllを削除します。- System32内の
sslTrusKSP.dllを削除します。
uninstallはProgramData/sslTrusKSPディレクトリ全体を削除しません。保存済みのconfig.dat、証明書ファイルおよびログは手動でクリーンアップする必要があります。
鍵設定の確認
signtool ksp list
出力フィールドの説明:
| フィールド | 説明 |
|---|---|
No | シリアル番号 |
CertCode | 証明書番号 |
ServerUrl | nicsrs または default として表示 |
AccessKey | Access 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
実行後:
- リモートの
/v1/codesign/certを呼び出して証明書のPEMを取得します。 - 証明書を
ProgramData/sslTrusKSP/CERT_CODE.crtとして保存します。 - 鍵設定を
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.exe は Microsoft 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_CODE | KSPの鍵名を指定します。証明書番号とすることが規約です |
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt | ksp add で保存される証明書ファイルを指定します |
/fd SHA256 または /fd SHA1 | ファイルダイジェストアルゴリズム |
/tr <url> | RFC3161タイムスタンプサービス |
/td SHA256 | タイムスタンプダイジェストアルゴリズム |
/as | 署名を追加し、既存の署名は上書きしません |
トラブルシューティングリファレンス
| エラーメッセージ | 考えられる原因 | 対処方法 |
|---|---|---|
key storage provider is only supported on windows | Windows 以外のプラットフォームで ksp コマンドを実行しました。 | KSP 操作は Windows でのみ実行してください。 |
no ksp configuration | KSP 設定ファイルがまだ作成されていません。 | 先に signtool ksp install と signtool ksp add を実行してください。 |
no such certificate code | 削除対象の証明書番号が存在しません。 | signtool ksp list を使用して証明書番号を確認してください。 |
セキュリティに関する注意事項
signtool ksp installとsigntool ksp uninstallはWindowsシステムディレクトリとCNG Providerの登録を変更するため、通常は管理者権限が必要です。signtool ksp addはリモート証明書インターフェースにアクセスし、証明書ファイルと暗号化設定をProgramData/sslTrusKSPに書き込みます。- Access Secret、KSP設定ファイル、ローカルログはいずれも機密情報として扱い、ログやバージョン管理リポジトリに書き込まないでください。