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 加密令牌接口 (Cryptographic Token Interface, 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 特定部分。配置存储基于文件(对于用户专用配置)和基于 smf(共享系统范围的缺省值)。有关更多信息,请参见 smf(7) 手册页。
在初始化 pkcs11_kmip 提供者之前,用户需要先使用 kmipcfg 命令配置 KMIP 服务器组。有关更多信息,请参见 kmipcfg(8) 手册页。
kmipcfg 在各自的 KMIP 令牌目录中创建配置文件。此步骤提供用来与 KMIP 服务器建立连接的配置材料(包括 TLS 凭证)。可以为 PKCS#11 客户机配置一个或多个服务器组。有关更多信息,请参见 kmipcfg(8) 手册页。
KMIP 令牌目录的缺省位置为 /var/user/$USERNAME/kmip。如果设置,则环境变量 $KMIPTOKEN_DIR 会覆盖缺省位置。此 KMIP 令牌目录下的每个子目录表示一个服务器组,用于保存 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 | +----------------------------------------------------+-------------+
使用 kmipcfg 命令初始化用户的专用 KMIP 令牌。例如,要创建名为 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 令牌,可以使用 pktool setpin 命令更改与各服务器组的 PKCS#12 包关联的口令短语。
# pktool setpin keystore=pkcs11 token=KMIP_server
通过使用 pktool setpin 操作或通过调用 C_Login() 和 C_SetPIN() 函数提供的 PIN 可以是长度介于 1 到 256 之间且不带嵌入空字符的任何字符串。
共享 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)