PKCS#11 设置#
安装#
您可以获取 NetHSM PKCS#11 模块的预编译二进制文件,也可以从源代码中编译它。
预编译二进制文件#
从`版本库页面<https://github.com/Nitrokey/nethsm-pkcs11/releases>`__下载与你的系统相对应的模块文件。
将模块文件复制到 PKCS#11 应用程序希望找到它的目录。
从源代码编译#
安装`Rust 工具链<https://www.rust-lang.org/tools/install>`__。
从`发行版页面<https://github.com/Nitrokey/nethsm-pkcs11/releases>`__下载并提取源代码,或克隆`资源库<https://github.com/Nitrokey/nethsm-pkcs11>`__。
在源代码目录下运行``cargo build –release``。
配置#
默认情况下,模块会在以下位置搜索配置文件:
/etc/nitrokey/p11nethsm.conf
/usr/local/etc/nitrokey/p11nethsm.conf
$HOME/.config/nitrokey/p11nethsm.conf
如果存在多个文件,配置将被合并,以便模块使用所有配置文件的插槽。
您可以使用环境变量``P11NETHSM_CONFIG_FILE``(例如``P11NETHSM_CONFIG_FILE=./p11nethsm.conf``)手动设置配置文件的位置(只读取该文件)。
配置文件格式#
配置采用 yaml 格式:
# Set this option to true to enable the compatibility option for the C_SetAttributeValue() function.
# This allows the applications using the Java Sun PKCS11 module (like EJBCA) to generate keys.
# When using this, the names given to the keys will be ignored and the keys will have random names.
# Under the hood it will store in memory the name given to the key when calling C_SetAttributeValue(). When a certificate is uploaded it will check if the name was previously passed to C_SetAttributeValue() and translate it to the real name on the NetHSM.
enable_set_attribute_value: false
# You can set the log file location here.
# If no value is set the module will output to stderr.
# If a value is set it will output to the file.
log_file: /tmp/p11nethsm.log
# Optional log level
log_level: Debug
# Each "slot" represents a NetHSM server
slots:
- label: LocalHSM # Name you NetHSM however you want
description: Local HSM (docker) # Optional description
# Users connecting to the NetHSM server
operator:
username: "operator"
password: "env:LOCALHSMPASS"
administrator:
username: "admin"
# List the NetHSM instances
instances:
- url: "https://keyfender:8443/api/v1" # URL to reach the server
# When the NetHSM has a self-signed certificate, it can be verified by a sha256 fingerprint of the NetHSM's certificate:
sha256_fingerprints:
- "31:92:8E:A4:5E:16:5C:A7:33:44:E8:E9:8E:64:C4:AE:7B:2A:57:E5:77:43:49:F3:69:C9:8F:C4:2F:3A:3B:6E"
实例#
如果同一插槽中列出多个 NetHSM 实例,则必须将这些实例配置为一个群集。所有实例上的用户证书和密钥必须相同。
模块将以循环方式使用实例,如果一个实例失败,就会尝试另一个实例。
用户#
操作员和管理员用户都是可选的,但如果没有配置用户,模块将无法启动。因此,您可以只配置管理员用户、操作员用户或同时配置这两个用户。
设置两个用户后,模块将默认使用操作员用户,只有在操作需要时才使用管理员用户。
常规 PKCS11 用户映射为 NetHSM 操作员,PKCS11 SO 映射为 NetHSM 管理员。
密码#
密码可以通过多种方式提供:
在配置``password: “mypassword”`` 中以纯文本形式出现。
在模块读取的环境变量中,以``env:`` 为前缀:
env:ENV_STORING_THE_PASSWORD
通过 pkcs11 的登录功能,以 pcks11-tool 为例:
pkcs11-tool --module libnethsm_pkcs11.so -p opPassphrase
要提供管理员密码,需要使用``–so-pin`` 代替:pkcs11-tool --module libnethsm_pkcs11.so --login --login-type so --so-pin Administrator
如果配置文件中未设置用户密码,则需要登录以提供密码(第 3 种方法)。
未运行的 NetHSM 被视为不存在令牌的插槽。