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 のインストールにはシステムプロバイダーの登録および Windows システムディレクトリが関わるため、通常は管理者権限が必要です。
証明書設定の追加
以下を実行します。
signtool ksp add
プロンプトに従って入力します:
Access Key
Access Secret
Certificate Code
クライアントはリモートコード署名サービスから対応する証明書を取得し、リモートサービスアドレス、アクセス認証情報、証明書設定を保存します。
NICSRS(www.nicsrs.com)環境を使用する場合、--address nicsrs を追加する必要があります:
signtool ksp add --address nicsrs
証明書の登録
KSP の設定が完了したら、コードサイニング証明書を Windows 証明書ストアに登録し、KSP プロバイダーに関連付ける必要があります。
実行:
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 | タイムスタンプダイジェストアルゴリズムを指定 |
sslTrus CSP は SHA1、SHA256、SHA384、SHA512 のダイジェストアルゴリズムに対応しています。新規署名の場合は通常 SHA-256 以上の強度のアルゴリズムを使用する必要があります。
署名の検証
署名が完了したら、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 が使用する暗号化 Provider インターフェイスにあり、リモート秘密鍵のセキュリティモデルは同じです。
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保護範囲が自動的に変更されることはありません。