pkcs11_kmip - KMIP サーバーの RSA PKCS#11 プロバイダ
/usr/lib/security/pkcs11_kmip.so /usr/lib/security/64/pkcs11_kmip.so
pkcs11_kmip.so オブジェクトは、Key Management Interoperability Protocol (KMIP) を使用して KMIP サーバーと通信することで、RSA Security Inc. の PKCS#11 暗号化トークンインタフェース (Cryptoki) v2.20 仕様を実装します。次の PKCS#11 メカニズムがこのプロバイダでサポートされます。
CKM_AES_KEY_GEN CKM_AES_CBC CKM_AES_CBC_PAD
このプロバイダでサポートされている PKCS#11 インタフェースは次のとおりです。
C_Initialize C_Finalize C_GetInfo C_GetFunctionList C_GetSlotList C_GetSlotInfo C_GetTokenInfo C_GetMechanismList C_GetMechanismInfo C_InitToken C_SetPIN C_OpenSession C_CloseSession C_CloseAllSessions C_GetSessionInfo C_Login C_Logout C_CreateObject C_CopyObject C_DestroyObject C_GetObjectSize C_GetAttributeValue C_SetAttributeValue C_FindObjectsInit C_FindObjects C_FindObjectsFinal C_EncryptInit C_Encrypt C_EncryptUpdate C_EncryptFinal C_DecryptInit C_Decrypt C_DecryptUpdate C_DecryptFinal C_GenerateKey
pkcs11_kmip プロバイダは複数のスロットをサポートします。それぞれのスロットに単一の KMIP サーバーグループが格納されます。つまり、KMIP サーバーのグループは PKCS#11 スロットに接続されたトークンを表します。
KMIP PKCS#11 トークンの構成は、pkcs11_kmip に固有の部分と libkmip に固有の部分、の 2 つの部分から成ります。構成のストレージは、ファイルベース (ユーザープライベート構成用)、smf ベース (システム全体で共有されるデフォルト)、のいずれかになります。詳細は、smf(7) のマニュアルページを参照してください。
pkcs11_kmip プロバイダを初期化する前に、まず kmipcfg コマンドを使って KMIP サーバーグループを構成する必要があります。詳細は、kmipcfg(8) のマニュアルページを参照してください。
kmipcfg は、対応する KMIP トークンディレクトリ内に構成ファイルを作成します。このステップにより、KMIP サーバーへの接続を確立するための構成データ (TLS 資格を含む) が用意されます。1 つ以上のサーバーグループを PKCS#11 クライアントに対して構成できます。詳細は、kmipcfg(8) のマニュアルページを参照してください。
KMIP トークンディレクトリのデフォルトの場所は /var/user/$USERNAME/kmip です。環境変数 $KMIPTOKEN_DIR を設定すると、デフォルトの場所がオーバーライドされます。この KMIP トークンディレクトリの下の各サブディレクトリは 1 つのサーバーグループを表しており、KMIP クライアントから KMIP サーバーへの接続時に必要な構成情報を保持します。
KMIP クライアントコンポーネントの共有構成は、サービス管理フレームワークに格納されます。詳細は、smf(7) のマニュアルページを参照してください。構成へのアクセスやその変更のための規則は、SMF のセキュリティーフレームワークによって決まります。詳細は、smf_security(7) のマニュアルページを参照してください。KMIP クライアントコンポーネントに固有の承認やプロファイルは、RBAC フレームワークで事前に構成され、対応するサービスインスタンスマニフェストで許可される操作を制御するために使用されます。
共有 KMIP クライアント構成は、「デフォルト KMIP トークン」のサーバーグループとトークンによって表されます。構成パラメータを更新するには kmipcfg を使用します。
サービスインスタンスと承認プロファイル: 最上位の KMIP クライアントサービスインスタンス svc:/system/pkcs11:kmip で次の rbac プロファイルが定義されています。
+----------------------------------------------------+-------------+ | PROFILE NAME | ACCESS TYPE | +----------------------------------------------------+-------------+ | PKCS11 Default KMIP Token User | read-only | +----------------------------------------------------+-------------+ | PKCS11 Default KMIP Token Administrator | read-write | +----------------------------------------------------+-------------+ | PKCS11 Default KMIP Token Service Instance Control | read-write | | | + instance | | | management | +----------------------------------------------------+-------------+
ユーザーのプライベート KMIP トークンは kmipcfg コマンドを使用して初期化します。たとえば、KMIP_server という名前のサーバーグループを作成するには:
# kmipcfg create -o server_list=kmip-server.example.com:5696\ -o client_p12=kmip-server.p12 KMIP_server
kmipcfg create コマンドによってプライベート KMIP トークンを初期化して構成したあとで、サーバーグループの名前を pktool inittoken コマンドで変更できます。
# pktool inittoken slotid=3 currlabel=KMIP_server\ newlabel=KMIP_newserver
初期化済みのプライベート KMIP トークンでは、対応するサーバーグループの PKCS#12 バンドルに関連付けられたパスフレーズを、pktool setpin コマンドを使って変更できます。
# pktool setpin keystore=pkcs11 token=KMIP_server
pktool setpin 演算を使用するか、C_Login() および C_SetPIN() 関数を呼び出すことによって提供される PIN には、長さが 1 - 256 で NULL が埋め込まれていない任意の文字列を指定できます。
共有 KMIP トークンが kmipcfg create コマンドによって作成されることは、決してありません。このトークンは pkcs11_kmip パッケージのインストール時に自動的に事前構成され、ユーザーと「デフォルト KMIP トークン」固有の rbac 承認との関連付けの有無だけで、ユーザーがそのトークンを使用できるかどうかが決まります。
「デフォルト KMIP トークン」のパラメータを設定するには、kmipcfg set コマンドを使用します。
# kmipcfg set -o server_list="kmip-server.example.com:5696"\ -o cred_source_type=raw -o cert=/tmp/cert.pem\ -o private_key=/tmp/key.pem -o ca_cert=/tmp/ca_cert.pem\ "Default KMIP token"
少なくともパラメータ cert と private_key、または p12_bundle が正常に設定されていれば、対応するトークンに「保護された認証パス」のフラグが設定され、PIN を使用しないアクセスが可能となります。C_Login() 関数の呼び出しはやはり必要ですが、pPin 引数は NULL_PTR に設定されます。パラメータを設定すると、「デフォルト KMIP トークン」の初期化も行われるので、それ以上トークンを初期化する必要はありません。
実装されている各関数の戻り値は、RSA PKCS#11 v2.20 仕様で定義されています。
実装されていない関数を呼び出すと、すべて CKR_FUNCTION_NOT_SUPPORTED が返されます。
ユーザーのデフォルトの KMIP トークンディレクトリ
KMIP トークンディレクトリの代替の場所
属性についての詳細は、マニュアルページの attributes(7) を参照してください。
|
pktool(1), libpkcs11(3LIB), attributes(7), cryptoadm(8), kmipcfg(8)