signtool ksp と Windows KSP の統合
signtool ksp はWindows sslTrus Key Storage Provider(KSP)を管理します。KSP のインストールと設定が完了すると、Microsoft signtool.exe はCNG プロバイダーを介してリモート署名サービスを呼び出すことができ、ローカルで秘密キーを保持する必要はありません。
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 プロバイダーを登録します:
sslTrus Key Storage Provider。 - KSP 構成ファイル
ProgramData/sslTrusKSP/config.datを保存します(DPAPI 暗号化)。
install はシステムレベルの CNG プロバイダー登録を変更するため、管理者ターミナルで実行することを推奨します。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 設定ファイル、ローカルログはいずれも機密情報として扱い、ログやバージョンリポジトリには記録しないでください。