コンテンツにスキップ

SoftHSMv2


1. SoftHSMv2のインストールと設定

まず、SoftHSMv2をインストールし、トークンをデフォルトの場所/var/lib/softhsm/tokensに保存するように設定します。また、keylessユーザーがこのディレクトリにアクセスできるように、softhsmグループにこのディレクトリへの権限を与える必要があります。

Terminal window
sudo apt-get install -y softhsm2 opensc
#...
cat <<EOF | sudo tee /etc/softhsm/softhsm2.conf
directories.tokendir = /var/lib/softhsm/tokens
objectstore.backend = file
log.level = DEBUG
slots.removable = false
EOF
sudo mkdir /var/lib/softhsm/tokens
sudo chown root:softhsm $_
sudo chmod 0770 /var/lib/softhsm/tokens
sudo usermod -G softhsm keyless
sudo usermod -G softhsm $(whoami)
echo 'export SOFTHSM2_CONF=/etc/softhsm/softhsm2.conf' | tee -a ~/.profile
source ~/.profile

2. トークンとプライベートキーを作成し、CSRを生成する

次に、スロット0にtest-tokenというトークンを作成し、PINを1234で保護します。このスロットには、keyless-softhsm.example.comのSSL証明書用のRSAキーを保存します。

Terminal window
sudo -u keyless softhsm2-util --init-token --slot 0 --label test-token --pin 1234 --so-pin 4321
トークンが初期化されました。

cfsslを使用して、プライベートキーと証明書署名要求(CSR)を生成します。後者は証明書機関(CA)に署名のために送信されます。

Terminal window
cat <<EOF | tee csr.json
{
"hosts": [
"keyless-softhsm.example.com"
],
"CN": "keyless-softhsm.example.com",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "US",
"L": "San Francisco",
"O": "TLS Fun",
"OU": "Technical Operations",
"ST": "California"
}]
}
EOF
cfssl genkey csr.json | cfssljson -bare certificate
2018/08/12 00:52:22 [INFO] generate received request
2018/08/12 00:52:22 [INFO] received CSR
2018/08/12 00:52:22 [INFO] generating key: rsa-2048
2018/08/12 00:52:22 [INFO] encoded CSR

3. キーを変換してインポートする

キーが生成されたので、作成したスロットにロードする時が来ました。その前に、PKCS#1からPKCS#8形式に変換する必要があります。インポート時には、トークンとトークン初期化時のPINを指定し、キーに一意の16進数IDとラベルを提供します。

Terminal window
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in certificate-key.pem -out certificate-key.p8
sudo chown keyless certificate-key.p8
sudo -u keyless softhsm2-util --pin 1234 --import ./certificate-key.p8 --token test-token --id a000 --label rsa-privkey
トークンラベルに一致するスロット915669571が見つかりました。
キー ペアがインポートされました。

インポート後、pkcs11-toolを使用して、オブジェクトがトークンに正常に保存されたことを確認します。

Terminal window
sudo -u keyless pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so -l -p 1234 --token test-token --list-objects
公開鍵オブジェクト; RSA 2048ビット
ラベル: rsa-privkey
ID: a000
使用法: verify
プライベートキーオブジェクト; RSA
ラベル: rsa-privkey
ID: a000
使用法: sign

4. gokeylessの設定ファイルを修正し、サービスを再起動する

キーが配置されたので、キーサーバーが起動時に読み込む設定ファイルを構築する時が来ました。idは、softhsm2-utilインポート文に提供した16進数IDを指します。私たちはa000を使用したので、%a0%00としてエンコードされます。module-pathは、使用しているLinuxディストリビューションに応じてわずかに異なります。Debianでは/usr/lib/softhsm/libsofthsm2.soである必要があります。

/etc/keyless/gokeyless.yamlを開き、すぐ後に

private_key_stores:
- dir: /etc/keyless/keys

次の行を追加します。

- uri: pkcs11:token=test-token;id=%a0%00?module-path=/usr/lib/softhsm/libsofthsm2.so&pin-value=1234&max-sessions=1

設定ファイルを保存し、gokeylessを再起動して、正常に起動したことを確認します。

Terminal window
sudo systemctl restart gokeyless.service
sudo systemctl status gokeyless.service -l