正如@david-maze 所说,SoftHSMv2 是一个公正的库,它只能在本地使用。在 Ubuntu 20.04 中,它可以作为标准存储库中的 deb 包使用。
注意SoftHSMv2 根本不用于生产,它可以用于开发目的,因为这样的硬件非常昂贵。它具有 PKCS11 接口,因此可以使用此接口的所有 HSM 的代码应该相同。
pkcs11-proxy/daemon
顺便说一句,您可以通过https://github.com/SUNET/pkcs11-proxy远程使用 SoftHSMv2 。似乎它已被遗弃但仍在工作的项目。同样,它不是生产变体。
那么如何在例如 Ubuntu 20.04 中使用它呢?
在服务器上。
- 为构建安装依赖项
pkcs11-proxy
:
$ apt-get install -y \
ca-certificates \
git-core \
build-essential \
cmake \
libssl-dev \
libseccomp-dev
- 克隆代码:
$ git clone https://github.com/SUNET/pkcs11-proxy
- 构建并安装:
$ cd pkcs11-proxy && \
cmake . && \
make && \
make install
- 使用依赖项安装 SoftHSM2:
$ apt-get install -y \
softhsm2 \
opensc \
gnutls-bin \
libengine-pkcs11-openssl1.1
- SoftHSM 中的初始化槽/令牌:
$ softhsm2-util --init-token --slot 0 --label "main" \
--pin "123456" \
--so-pin "78910"
不要忘记选择更好的值。6. 现在你可以启动了pkcs11-proxy
:
$ export PKCS11_DAEMON_SOCKET="tcp://0.0.0.0:5657"
$ /usr/local/bin/pkcs11-daemon /usr/lib/softhsm/libsofthsm2.so
在客户端。
- 再次从前面的步骤构建
pkcs11-proxy
或复制libpkcs11-proxy.so
库:
$ apt-get install -y \
ca-certificates \
git-core \
build-essential \
cmake \
libssl-dev \
libseccomp-dev
$ git clone https://github.com/SUNET/pkcs11-proxy
$ cd pkcs11-proxy && \
cmake . && \
make && \
make install
- 现在您可以通过网络远程使用您的 SoftHSM:
$ export PKCS11_PROXY_SOCKET="tcp://ip_or_domain_of_softhsm:5657"
$ pkcs11-tool --module=/usr/local/lib/libpkcs11-proxy.so -L
Available slots:
Slot 0 (0x5b763d80): SoftHSM slot ID 0x5b763d80
token label : main
token manufacturer : SoftHSM project
token model : SoftHSM v2
token flags : login required, rng, token initialized, PIN initialized, other flags=0x20
hardware version : 2.5
firmware version : 2.5
serial num : 27c11aa55b763d80
pin min/max : 4/255
Slot 1 (0x1): SoftHSM slot ID 0x1
token state: uninitialized
pkcs11-tool
您还可以通过and生成新密钥/上传自己的密钥等libpkcs11-proxy.so
:
$ pkcs11-tool --module=/usr/local/lib/libpkcs11-proxy.so -l --keypairgen --key-type rsa:2048 --id 100 --label mykey
Logging in to "main".
Please enter User PIN:
Key pair generated:
Private Key Object; RSA
label: mykey
ID: 0100
Usage: decrypt, sign, unwrap
Access: sensitive, always sensitive, never extractable, local
Public Key Object; RSA 2048 bits
label: mykey
ID: 0100
Usage: encrypt, verify, wrap
Access: local
$ pkcs11-tool --module=/usr/local/lib/libpkcs11-proxy.so -O -l
Using slot 0 with a present token (0x2561b147)
Logging in to "main".
Please enter User PIN:
Private Key Object; RSA
label: my_key
ID: 0100
Usage: decrypt, sign, unwrap
Access: sensitive
Public Key Object; RSA 2048 bits
label: my_key
ID: 0100
Usage: encrypt, verify, wrap
Access: none
阅读pkcs11-tool
文档以获取更多信息。也支持 TLS 加密,但至少对我来说不稳定https://github.com/SUNET/pkcs11-proxy/blob/master/USAGE#L56