Windows Provider
sslTrus は KSP(Key Storage Provider) と CSP(Cryptographic Service Provider) の2つのWindows Provider統合方式を提供します。
Windows Providerを通じて、Microsoft SignTool、Visual Studio、MSBuild、インストールパッケージツール、およびその他のWindows暗号化インターフェースをサポートするソフトウェアが、sslTrusのクラウドコード署名機能を利用できるようになります。
署名秘密鍵は常にクラウドHSMに保持され、秘密鍵ファイルをローカルコンピュータに展開する必要はありません。
KSPおよびCSPのインストール、設定、保守はすべてsslTrus SignTool CLIを通じて完了し、sslTrusクライアントリリースページからダウンロードできます。
KSP と CSP
KSPとCSPは、それぞれWindowsの2世代の暗号化インターフェースに対応しています:
| Provider | Windowsインターフェース | 適用シナリオ |
|---|---|---|
| KSP | CNG(Cryptography API: Next Generation) | 最新のWindowsアプリケーションおよび署名ツールに推奨 |
| CSP | CryptoAPI | 従来のアプリケーション、またはCSPの使用が明示的に要求されるソフトウェア |
新しいWindows統合シナリオでは、通常KSPを優先的に使用します。
対象ソフトウェアがKSPをサポートしない場合、または従来のCryptoAPI Providerの使用が明示的に要求される場合にのみ、CSPを使用します。
KSP
KSPはWindows CNGベースのKey Storage Providerです。
sslTrus KSPをインストールすると、CNGをサポートするWindowsアプリケーションが、標準のWindows鍵インターフェースを通じてリモートコード署名サービスを呼び出せます。
ローカルProviderはアプリケーションから発行された署名要求を受け取り、署名が必要なダイジェストをリモートコード署名サービスに送信します。実際の秘密鍵操作はクラウドHSM上で完了します。
適用シナリオ
KSPは以下に適用されます:
- Microsoft SignTool。
- Visual Studio。
- MSBuild。
- Windows CNGをサポートするビルドおよび署名ソフトウェア。
- 標準Windows Providerを通じてリモート秘密鍵に接続する必要があるアプリケーション。
KSPのインストール
管理者ターミナルで以下を実行します:
signtool ksp install
該コマンドは以下のものをインストールおよび登録します:
sslTrus Key Storage Provider
KSP のインストールにはシステム Provider の登録や Windows システムディレクトリの操作が伴うため、通常は管理者権限が必要です。
証明書設定の追加
以下を実行します:
signtool ksp add
根据プロンプトを入力してください:
Access Key
Access Secret
Certificate Code
クライアントはリモートコード署名サービスから対応する証明書を取得し、リモートサービスアドレス、アクセス資格情報、証明書設定を保存します。
NICSRS(www.nicsrs.com)環境を使用する場合は、--address nicsrsを追加する必要があります。
signtool ksp add --address nicsrs
証明書の登録
KSP の設定が完了したら、コード署名証明書を Windows 証明書ストアに登録し、KSP Provider に関連付ける必要があります。
実行手順:
signtool ksp register
デフォルトでは、現在のユーザーの個人証明書ストアに登録されます。
LocalMachine 証明書ストアに登録する必要がある場合:
signtool ksp register --store local-machine
注册完了后、Windows は対応する証明書を利用可能な秘密鍵を持つものとして認識しますが、実際の秘密鍵は引き続きクラウドHSMに保存されます。
Microsoft SignTool の使用
KSP の構成が完了したら、Windows SDK に付属する Microsoft signtool.exe を使用してファイルに署名できます。
例:
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 ^
".\app.exe"
主要パラメータ:
| パラメータ | 説明 |
|---|---|
/csp | sslTrus KSP Providerを指定 |
/kc | 証明書番号に対応するキーコンテナを指定 |
/f | コード署名証明書を指定 |
/fd | ファイルダイジェストアルゴリズムを指定 |
/tr | RFC 3161タイムスタンプサーバーを指定 |
/td | タイムスタンプダイジェストアルゴリズムを指定 |
既存の署名にSHA-1署名を追加する必要がある場合は、/as パラメータを使用できます:
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 ^
".\app.exe"
Microsoft signtool.exe は、Windows CNG を通じて sslTrus KSP を呼び出し、KSP がリモート秘密鍵による署名を実行します。
KSP の管理
設定済みの KSP を確認するには:
signtool ksp list
削除設定:
signtool ksp del
証明書とKSPの関連付けを解除します:
signtool ksp deregister
KSPをアンインストールします:
signtool ksp uninstall
Provider をアンインストールする前に、他の Windows アプリケーションがその Provider に依存していないことを確認してください。
CSP
CSP は、従来の Windows CryptoAPI が使用する Cryptographic Service Provider です。
主に、/csp と /kc パラメータで Provider とキーコンテナを指定する必要がある Windows 署名プロセスで使用されます。sslTrus CSP はクライアント側でインストールおよび保守が行われ、実際のファイル署名は引き続き Windows SDK の Microsoft signtool.exe によって実行されます。
適用シナリオ
CSP は以下の場合に適用されます:
- 従来の CryptoAPI のみをサポートする Windows ソフトウェア。
- CSP Provider の明示的な指定を要求する署名ツール。
- Microsoft SignTool の
/cspおよび/kcパラメータを使用して署名を実行する必要がある環境。 - Windows CNG / KSP を利用できない旧バージョンのアプリケーション。
KSP を正常に利用できる新しいシステムでは、通常は追加の CSP は不要です。
CSP のインストール
管理者ターミナルで以下を実行します:
signtool csp install
インストール中に登録されます:
sslTrus Cryptographic Service Provider
また、Provider DLL を Windows システムにインストールします。
CSP Provider の種類は次のとおりです:
PROV_RSA_AES
ローカル設定はデフォルトで以下に保存されます:
%ProgramData%\sslTrusKSP
設定ファイルはWindows DPAPIを使用して保護されています。
KSPも同時にインストールする必要がある場合は、以下を実行できます:
signtool csp install --with-ksp
証明書設定の追加
実行:
signtool csp add
根据提示、入力してください。
Access Key
Access Secret
Certificate Code
追加完了後、クライアントは対応する証明書をダウンロードし、次の場所に保存します:
%ProgramData%\sslTrusKSP\CERT_CODE.crt
其中 CERT_CODE は、リモート証明書識別子および後続の Microsoft SignTool で使用するキーコンテナ名として同時に機能します。
NICSRS(www.nicsrs.com)環境を使用する場合は、--address nicsrs を追加する必要があります。
signtool csp add --address nicsrs
証明書の登録
既定では、証明書は現在のユーザーの個人証明書インベントリに登録されます。
signtool csp register
如果需要注册到 LocalMachine:
signtool csp register --store local-machine
対応する証明書ストアには以下が含まれます:
| パラメータ | Windows証明書ストア |
|---|---|
current-user | CurrentUser\My |
local-machine | LocalMachine\My |
登録完了後、Windows証明書マネージャーには対応する証明書に秘密キーが関連付けられていると表示されますが、秘密キーは実際にはクラウド上のHSMに保持されています。
Microsoft SignToolの使用
CSP署名時には、Provider、キーコンテナ、および証明書ファイルを明示的に指定する必要があります:
signtool.exe sign /v ^
/csp "sslTrus Cryptographic Service Provider" ^
/kc CERT_CODE ^
/f "C:\ProgramData\sslTrusKSP\CERT_CODE.crt" ^
/fd SHA256 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
".\app.exe"
主要参数:
| 参数 | 说明 |
|---|---|
/csp | sslTrus CSP Provider を指定 |
/kc | 証明書番号に対応するキーコンテナを指定 |
/f | コード署名証明書を指定 |
/fd | ファイルダイジェストアルゴリズムを指定 |
/tr | RFC 3161 タイムスタンプサーバーを指定 |
/td | タイムスタンプダイジェストアルゴリズムを指定 |
現在のリモート署名インターフェースは SHA1 および SHA256 ダイジェストアルゴリズムをサポートしています。新規の署名シナリオでは SHA256 を優先して使用してください。SHA1 は旧システムとの互換性が必要な場合にのみ使用します。
署名の検証
署名完了後、Microsoft SignTool を使用して検証できます:
signtool.exe verify /pa /v ".\app.exe"
署名の検証はリモート秘密鍵を再度呼び出さず、新しい署名回数も発生しません。
CSP の管理
既存の設定を確認する:
signtool csp list
削除特定の証明書設定:
signtool csp del
証明書とCSPの秘密鍵との関連付けを解除します。
signtool csp deregister
プロバイダーのアンインストール:
signtool csp uninstall
CSP 構成の削除は、すでにダウンロード済みの証明書ファイルを自動的に削除しません。関連する証明書と構成がもはや使用されない場合は、他の Provider が依存していないことを確認してからクリーンアップを行う必要があります。
KSP と CSP
特別な互換性要件がない場合は、以下の方法で選択できます:
| シナリオ | 推奨 |
|---|---|
| 新しい Windows 署名環境 | KSP |
| Windows CNG をサポート | KSP |
| Microsoft SignTool などの最新 Windows ツール | KSP |
| ソフトウェアが明示的に CSP を要求 | CSP |
| 従来の CryptoAPI アプリケーション | CSP |
ツールが /csp と /kc の使用を要求 | CSP |
KSP と CSP の主な違いは、Windows が使用する暗号プロバイダーインターフェースが異なることであり、リモート秘密鍵のセキュリティモデルは同じです。
KSP または CSP のどちらを使用しても、コード署名秘密鍵はローカルクライアントに保存されません。
署名回数
Windows Provider の署名回数は、基盤となる実際に完了したリモート署名アクションに基づいて計算されます。
例:
SHA256 签名一次 = 1 次
同一ファイルに対してSHA256署名を先に完了し、その後さらに別の署名を追加すると、リモート秘密鍵の操作が再度トリガーされるため、それぞれ個別に計算する必要があります。
KSPシナリオでは、同じファイルに対してSHA256とSHA1の二重署名を実行すると、通常、基盤となる署名呼び出しが2回発生します。
具体的なルールについては、参考資料を参照してください。
タイムスタンプ
Windows Authenticode署名には、信頼できるタイムスタンプを追加することを通常推奨します。
現代のコード署名シナリオでは、RFC 3161タイムスタンプを優先的に使用することを推奨します。例:
http://timestamp.acs.microsoft.com
実際の本番環境では、対象のWindowsバージョン、証明書ポリシー、ネットワーク環境、およびタイムスタンプサービスの要件に応じて、適切なTSAを選択する必要があります。
具体的なタイムスタンプサーバーとプロトコルの説明については、参考资料 を参照してください。
セキュリティ上の注意事項
Windows Providerを使用する際には、以下の点に注意してください。
- Access Secretは機密性の高い認証情報として保護する必要があります。
- アクセス認証情報を公開スクリプトやログに書き込まないでください。
- Provider設定ファイルを公開して共有しないでください。
- ローカルの証明書ファイルにはコード署名用の秘密鍵は含まれません。
- コード署名用の秘密鍵は常にクラウド上のHSMに保管されます。
- KSP/CSPによる署名開始時には、リモートのコード署名サービスへのアクセスが必要です。
- LocalMachine証明書ストアを使用する場合は、Windowsユーザーの権限と認証情報のアクセス範囲に特に注意してください。
CSPの config.dat は現在のWindowsユーザープロファイルのDPAPIで保護されており、証明書をLocalMachineに登録しても、この設定のDPAPI保護範囲は自動的には変更されません。