要开始使用 PKCS#11 token,您需要使用私钥、PIN 和 token 标签对其进行初始化。相关说明因硬件设备而异,您应遵循供应商提供的说明。您还需要找到 module(一个共享对象文件,.so)的路径。初始化设备后,您可以查询它以检查 token 标签:
pkcs11-tool --module <module path> --list-token-slots您还需要检查所导入(或生成)私钥的标签。运行以下命令并查找 Private Key Object:
pkcs11-tool --module <module path> --pin <pin> \
--list-token-slots --login --list-objects现在您已拥有将 PKCS#11 token 与 Keyless server 一起使用所需的全部信息,方法是在配置文件的 private_key_stores 部分进行添加。您可以使用 PKCS#11 URI ↗ 格式,在配置文件中指定希望 Keyless 能够访问的密钥对。
PKCS#11 URI 是由分号分隔的属性值对序列,构成单层路径组件,之后可选择跟随查询部分。其一般形式为:
pkcs11:path-component[?query-component]URI 路径组件包含用于标识资源的属性。查询组件可包含检索路径组件所标识资源时可能需要的一些属性。路径组件中的属性以 ; 字符分隔,查询组件中的属性以 & 作为分隔符。所有属性均经过 URL 编码。
Keyless 要求指定以下三个属性:
- Module:使用
module-path定位 PKCS#11 模块库。 - Token:使用
serial、slot-id或token指定 PKCS#11 token。 - 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 模块,因此如果您的密钥分布在多个 HSM 上,我们建议使用 p11-glue 通过一个模块整合访问 ↗。