← Cloudflare SSL/TLS / ssl / keyless-ssl / hardware-security-modules
SoftHSMv2
1. Установка и настройка SoftHSMv2
Сначала установите SoftHSMv2 и настройте его для хранения токенов в расположении по умолчанию /var/lib/softhsm/tokens. Нам также нужно предоставить softhsm группе разрешение на этот каталог, так как именно так keyless пользователь будет обращаться к этому каталогу.
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 ~/.profile2. Создание токена и закрытых ключей, а также генерация CSR
Далее создадим токен в слоте 0 под названием test-token и защитите его PIN-кодом длиной 1234. В этом слоте мы будем хранить ключи RSA для наших SSL-сертификатов keyless-softhsm.example.com.
sudo -u keyless softhsm2-util --init-token --slot 0 --label test-token --pin 1234 --so-pin 4321The token has been initialized.С помощью cfssl создаём закрытые ключи и запросы на подпись сертификата (CSR) ↗, который затем будет отправлен в удостоверяющий центр (CA) для подписания.
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 certificate2018/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 CSR3. Преобразуйте и импортируйте ключ
Теперь, когда ключ создан, его нужно загрузить в подготовленный слот. Перед этим необходимо преобразовать его из формата PKCS#1 в PKCS#8. При импорте указываются токен и PIN-код, полученные при инициализации токена, а также уникальный шестнадцатеричный идентификатор и метка ключа.
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-privkeyFound slot 915669571 with matching token label.
The key pair has been imported.После импорта мы просим pkcs11-tool чтобы подтвердить, что объекты успешно сохранены в токене.
sudo -u keyless pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so -l -p 1234 --token test-token --list-objectsPublic Key Object; RSA 2048 bits
label: rsa-privkey
ID: a000
Usage: verify
Private Key Object; RSA
label: rsa-privkey
ID: a000
Usage: sign4. Измените файл конфигурации gokeyless и перезапустите службу
Когда ключи готовы, настало время создать файл конфигурации, который ключевой сервер будет считывать при запуске. Файл id относится к шестнадцатеричному ID, который вы указали для softhsm2-util инструкция import; мы использовали 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, и убедитесь, что он успешно запустился.
sudo systemctl restart gokeyless.service
sudo systemctl status gokeyless.service -l