SoftHSM操作指南

830 阅读8分钟

引言

OpenDNSSEC通过PKCS#11接口处理并存储其加密密钥。该接口指定如何与诸如HSM :(硬件安全模块)和智能卡之类的加密设备进行通信。这些设备的目的是在不向外界透露私钥材料的情况下生成密码密钥和签名信息。

使用PKCS#11接口的潜在问题是,它可能会限制OpenDNSSEC的广泛使用,因为潜在的用户可能不愿投资于新的硬件设备。为了消除这种影响,OpenDNSSEC正在提供具有PKCS#11接口的通用加密设备SoftHSM的软件实现。SoftHSM旨在满足OpenDNSSEC的要求,但由于具有PKCS#11接口,因此还可以与其他加密产品一起使用。

安装

首先下载源码 opendnssec/SoftHSMv2

配置

配置安装/编译脚本:

sh ./autogen.sh  
./configure  

选项:

--disable-non-paged-memory  
Disable non-paged memory for secure storage  
(default enabled)  
--disable-ecc Disable support for ECC (default enabled)  
--disable-gost Disable support for GOST (default enabled)  
--disable-visibility Disable hidden visibilty link mode [enabled]  
--with-crypto-backend Select crypto backend (openssl|botan)  
--with-openssl=PATH Specify prefix of path of OpenSSL  
--with-botan=PATH Specify prefix of path of Botan  
--with-migrate Build the migration tool. Used when migrating  
a SoftHSM v1 token database. Requires SQLite3  
--with-objectstore-backend-db  
Build with database object store (SQLite3)  
--with-sqlite3=PATH Specify prefix of path of SQLite3  
--disable-p11-kit Disable p11-kit integration (default enabled)  
--with-p11-kit=PATH Specify install path of the p11-kit module, will  
override path given by pkg-config  

有关更多选项:

./configure --help  

编译

使用以下命令编译源代码:

make 或 sudo make  

安装

使用以下命令安装库:

sudo make install  

验证是否安装成功

softhsm2-util --show-slots  

如果所有都安装后,还报错误:
checking for OpenSSL GOST support... Cannot GOST engine
configure: error: OpenSSL library has no GOST support 【执行 ./configure --disable-gost 再安装 (2.2.0版本会有这个问题)】

配置

配置文件的默认位置是/etc/softhsm2.conf。可以通过设置环境变量来更改此位置,比如:

export SOFTHSM2_CONF=/home/user/config.file  

配置文件中定义了生成的token文件路径以及日志等级等信息:

# SoftHSM v2 configuration file  
  
directories.tokendir = /var/lib/softhsm/tokens/  
objectstore.backend = file  
  
# ERROR, WARNING, INFO, DEBUG  
log.level = INFO  

有关配置的详细信息,可以使用man softhsm2.conf

初始化token

创建在配置文件中定义的token目录:

mkdir /var/lib/softhsm/tokens/  

在初始状态下,最下面的slot0表示目前的slot数量为0,状态为未初始化。

Slot 0  
Slot info:  
Description: SoftHSM slot ID 0x0  
Manufacturer ID: SoftHSM project  
Hardware version: 2.2  
Firmware version: 2.2  
Token present: yes  
Token info:  
Manufacturer ID: SoftHSM project  
Model: SoftHSM v2  
Hardware version: 2.2  
Firmware version: 2.2  
Serial number:  
Initialized: no  
User PIN init.: no  
Label:  

然后每次初始化一个token就会增加一个新的slot用于记录刚刚初始化的token信息。

比如执行

softhsm2-util --init-token --slot 0 --label "ForFabric" --so-pin 1234 --pin 98765432  

这里,我们需要记下pin和label,用于后续配置在应用程序(比如fabric和fabric ca)中,这样应用程序才可以利用这些信息与去SoftHSM找到对应的token信息。

注意,这里指定的slot0 必须是已经存在的slot,否则会报错。

执行完以上命令后再次查看slot

 ~ softhsm2-util --show-slots  
Available slots:  
Slot 1655411567  
Slot info:  
Description: SoftHSM slot ID 0x62ab936f  
Manufacturer ID: SoftHSM project  
Hardware version: 2.2  
Firmware version: 2.2  
Token present: yes  
Token info:  
Manufacturer ID: SoftHSM project  
Model: SoftHSM v2  
Hardware version: 2.2  
Firmware version: 2.2  
Serial number: 4f6dddc562ab936f  
Initialized: yes  
User PIN init.: yes  
Label: ForFabric  
Slot 1  
Slot info:  
Description: SoftHSM slot ID 0x1  
Manufacturer ID: SoftHSM project  
Hardware version: 2.2  
Firmware version: 2.2  
Token present: yes  
Token info:  
Manufacturer ID: SoftHSM project  
Model: SoftHSM v2  
Hardware version: 2.2  
Firmware version: 2.2  
Serial number:  
Initialized: no  
User PIN init.: no  
Label:  

可以看到从上倒下新增了一个token,就是我们刚刚初始化的token。

链接

链接到该库并使用PKCS11接口。

后备

所有令牌及其对象都存储在softhsm2.conf给定的位置。因此可以将备份作为常规文件副本进行。

从存储库构建

如果直接从代码存储库下载代码,则必须准备配置脚本,然后才能继续使用真实的README。

您需要安装automake,autoconf,libtool等。
运行命令“ sh autogen.sh”
继续阅读此自述文件。

操作接口

SoftHSM的常用操作接口主要由三部分组成:

  • softhsm2-util
  • softhsm2-keyconv
  • softhsm2-dump-file

softhsm2-util

softhsm2-util 是 libsofthsm2的支持工具

简介

  • softhsm2-util --show-slots

  • softhsm2-util --init-token --free --label text [--so-pin PIN —-pin PIN]

  • softhsm2-util --import path [--file-pin PIN] --token label [--pin PIN --no-public-key] --label text --id hex

  • softhsm2-util --delete-token --token text

描述

softhsm2-util是一个主要用于libsofthsm2的支持工具。它还可以通过使用选项--module与其他PKCS#11库一起使用

大多数应用程序都假定它们想要使用的token已经初始化。然后由用户初始化PKCS#11的token。这是通过调用PKCS#11接口完成的,但是您可以使用softhsm2-util工具,而不是编写自己的工具。

密钥通常是直接在token中创建的,但用户可能希望使用现有的密钥对。密钥可以通过使用PKCS#11接口导入到令牌中,但是如果用户在PKCS#8文件中有密钥对,也可以使用这个工具。如果您需要将密钥从 BIND.private-key 格式转换成 PKCS#8, 可以使用 softhsm2-keyconv。

libsofthsm2库,也称为SoftHSM,通过使用PKCS#11 API提供加密功能。作为
OpenDNSSEC的项目,因此需要满足OpenDNSSEC的要求,而且还可以与其他软件一起使用。

SoftHSM是一个带有pkcs#11接口的通用密码设备的软件实现。这些设备通常被称为token。

请参阅手册 softhsm2.conf(5),了解如何创建这些token,以及如何将它们添加到SoftHSM中的一个slot。

PKCS#11 API可用于处理和存储加密密钥。该接口指定如何与加密设备通信,例如hsm(硬件安全模块)和智能卡。

这些设备的目的是在产生加密密钥和签名信息的同时而不向外界透露私钥材料信息。与普通计算机中的普通进程相比,它们通常被设计为在这些特定的情况下表现良好的任务。

ACTIONS

  • --delete-token

删除给定slot上的token。与--token或--serial一起使用。token中的任何内容都将被删除。

  • --help, -h

显示帮助信息。

  • --import path

从给定路径导入密钥对。文件必须是pkcs# 8格式。
与--slot或--token或--serial、--file-pin、--pin、--no-public-key、--label和--id一起使用。

  • --init-token

在给定的slot、token标签或token串行上初始化token。如果token已经初始化,那么这个命令将会重新初始化, 并删除标记中的所有对象。同时,进行重新初始化的时候必须提供配对的Security Officer ((SO)) PIN密码

此命令与 --slot or --token or --serial or --free, --label, --so-pin, and --pin 一起使用。

  • --show-slots

显示所有可用slot及其他们当前的状态。

--version,-v

显示版本信息。

选项

  • --file-pin PIN

PIN将被用于解密PKCS#8文件。如果没有给出,那么PKCS#8文件就被认为是未加密的。

  • --force

使用此选项可覆盖警告并强制执行给定操作。

  • --free

使用第一个 free/uninitialized 的令牌。

  • --id [hex]

选择密钥对的ID。该ID为可变长度的十六进制形式。在导入密钥对时使用 --force,如果ID已经存在。

  • --label [text]

定义要设置的对象或token的标签。

  • --module [path]

使用另一个PKCS#11库而不是SoftHSM。

  • --no-public-key

不要导入公钥

  • --pin [PIN]

普通用户的PIN码。

--serial [number]

将使用具有匹配序列号的令牌

  • --solt [number]

token所在的slot

  • --so-pin PIN

Security Officer ((SO))的PIN

--token label

将使用带有匹配token标签的token。

example

可以使用以下命令初始化token:

softhsm2-util——init-token——slot 1——label“mytoken”  

可以使用softhsm工具导入密钥对,其中指定密钥文件的路径、slot号、新对象的label和ID,和用户PIN。文件必须是pkcs# 8格式。

softhsm2-util --import key1.pem --token "mytoken" --label "My key" --id A1B2 --pin 123456  

((Add,——file-pin [PIN],如果密钥文件是加密的))

softhsm2-keyconv

softhsm2-keyconv

-从BIND转化成PKCS#8密钥文件格式

简介

softhsm2-keyconv --in path --out path [--pin PIN]

描述

softhsm2-keyconv可以将BIND.private-key文件转换为PKCS#8文件格式。这样就可以使用softhsm2-util命令将PKCS#8文件导入libsofthsm。如果您有另一种文件格式,那么openssl可能可以帮助您将其转换为PKCS#8文件格式。

选项

  • --help, -h

显示帮助界面

  • --in [path]

输入文件的路径

  • --out [path]

输出文件的路径

  • --pin [PIN]

PIN将被用于加密PKCS#8文件。如果没有给出,那么PKCS#8文件将是未加密的。

  • --version, -v

显示版本信息

examples

以下命令可以用来将BIND .private-key文件转换为PKCS#8文件:

softhsm2-keyconv --in Kexample.com.+007+05474.private --out rsa.pem  

softhsm2-dump-file

name

softhsm2-dump-file - SoftHSM对象文件存储

简介

softhsm2-dump-file [path]

描述

softhsm2-dump-file是一个可以转储SoftHSM v2对象文件的工具,用于调试。

选项

[path] 存放待转储的SoftHSM v2对象文件。

--help -h

显示帮助信息