設定
PKCS#11トークンを使用するには、プライベートキー、PIN、およびトークンラベルで初期化する必要があります。この手順は各ハードウェアデバイスに特有であり、ベンダーが提供する指示に従う必要があります。また、moduleのパス、共有オブジェクトファイル(.so)を見つける必要があります。デバイスを初期化したら、次のコマンドを使用してトークンラベルを確認できます。
pkcs11-tool --module <module path> --list-token-slotsインポートした(または生成した)プライベートキーのラベルも確認する必要があります。次のコマンドを実行し、Private Key Objectを探してください。
pkcs11-tool --module <module path> --pin <pin> \ --list-token-slots --login --list-objectsこれで、KeylessサーバーでPKCS#11トークンを使用するために必要なすべての情報が揃いました。設定ファイルのprivate_key_storesセクションに追加することで使用できます。KeylessがアクセスできるキーのペアをPKCS#11 URI ↗形式を使用して設定ファイルに指定できます。
PKCS#11 URIは、セミコロンで区切られた属性値ペアのシーケンスであり、一階層のパスコンポーネントを形成し、オプションでクエリが続きます。一般的な形式は次のようになります。
pkcs11:path-component[?query-component]URIパスコンポーネントには、リソースを識別する属性が含まれています。クエリコンポーネントには、URIパスコンポーネントで識別されたリソースを取得するために必要な属性が含まれる場合があります。パスコンポーネントの属性は;文字で区切られ、クエリコンポーネントの属性は&を区切り文字として使用します。すべての属性はURLエンコードされています。
Keylessでは、次の3つの属性を指定する必要があります。
- Module:
module-pathを使用してPKCS#11モジュールライブラリを特定します。 - Token:
serial、slot-id、またはtokenを使用してPKCS#11トークンを指定します。 - Slot:
idまたはobjectを使用してPKCS#11キーのペアを指定します。
特定のモジュールでは、モジュールへのセッションのオープンを防ぐために、クエリ属性max-sessionsが必要です。状況に応じて、pin-valueなどの追加の属性が必要になる場合があります。詳細については、PKCS#11モジュールの文書を参照してください。
さまざまなモジュールに保存されたキーのPKCS#11 URIの例をいくつか示します。
private_key_stores:- uri: pkcs11:token=SoftHSM2%20RSA%20Token;id=%03?module-path=/usr/lib64/libsofthsm2.so&pin-value=1234- uri: pkcs11:token=accelerator;object=thaleskey?module-path=/opt/nfast/toolkits/pkcs11/libcknfast.so- uri: pkcs11:token=YubiKey%20PIV;id=%00?module-path=/usr/lib64/libykcs11.so&pin-value=123456&max-sessions=1- uri: pkcs11:token=elab2parN;id=%04?module-path=/usr/lib/libCryptoki2_64.so&pin-value=crypto1現時点では、同時に使用できるPKCS#11モジュールは1つのみです。複数のHSMにキーがある場合は、p11-glueを使用して1つのモジュールを通じてアクセスを統合することをお勧めします ↗。