SoftHSM: учебная модель PKCS#11¶
SoftHSM — программная реализация интерфейса PKCS#11. Она помогает освоить слоты, токены, роли пользователя, PIN и объекты сертификатов без аппаратного устройства.
В НАЙС.ОС SoftHSM используется здесь именно как учебный PKCS#11. ГОСТ-механизмы в данной сборке SoftHSM отключены. Для тестирования ГОСТ-подписей потребуется аппаратный токен с соответствующей библиотекой производителя или другая специально собранная совместимая реализация.
Проверяем инструменты¶
Для учебных испытаний заведите отдельный временный каталог токенов и отдельную конфигурацию, чтобы не затрагивать общесистемные объекты.
umask 077
LAB="$(mktemp -d)"
mkdir -p "$LAB/tokens"
printf 'directories.tokendir = %s/tokens\nobjectstore.backend = file\n' "$LAB" > "$LAB/softhsm2.conf"
export SOFTHSM2_CONF="$LAB/softhsm2.conf"
softhsm2-util --show-slots
Инициализация требует SO PIN и пользовательского PIN. Команды, передающие их через аргументы, подходят только для одноразового учебного стенда и не должны попадать в историю производственной оболочки. Лучше инициировать лабораторный токен локально, не записывать реальные PIN в сценарий автоматизации и удалить тестовые данные после занятия.
Инициализация учебного токена¶
На одноразовой лабораторной машине создайте новый программный токен:
read -r -s -p 'Учебный SO PIN: ' SO_PIN; echo
read -r -s -p 'Учебный PIN пользователя: ' USER_PIN; echo
softhsm2-util --init-token --free \
--label "NiceOS-PKCS11-LAB" \
--so-pin "$SO_PIN" \
--pin "$USER_PIN"
unset SO_PIN USER_PIN
softhsm2-util --show-slots
Значения PIN не вводятся в историю оболочки, но на короткое время появляются в аргументах процесса softhsm2-util. Именно поэтому пример предназначен только для изолированной учебной среды с одноразовыми PIN, которые никогда не применяются в реальной инфраструктуре. Для производственных аппаратных токенов используйте защищённые средства производителя.
После инициализации команда --show-slots покажет слот, метку и факт наличия инициализированного токена. Уточните его slot ID прежде, чем выполнять дальнейшие операции.
Создание учебного ключа¶
Для освоения PKCS#11 выполните генерацию обычной тестовой RSA-пары внутри SoftHSM (это не ГОСТ-ключ):
MODULE=/usr/lib/pkcs11/libsofthsm2.so
pkcs11-tool --module "$MODULE" \
--keypairgen --key-type rsa:2048 \
--label NiceOS-Lab-Key --id 01 \
--login
Для ввода PIN используйте интерактивный запрос, а не --pin с открытым значением в параметрах команды. После создания изучите атрибуты тестового ключа:
При выборе ГОСТ-кривой для аппаратного токена нужен механизм, реально объявленный модулем производителя. Процедуру создания ключа ГОСТ выполняйте по руководству для аппаратных носителей после проверки списка --list-mechanisms.
Проверка PKCS#11¶
MODULE=/usr/lib/pkcs11/libsofthsm2.so
pkcs11-tool --module "$MODULE" --list-slots
pkcs11-tool --module "$MODULE" --list-mechanisms
Если путь библиотеки отличается, получите его из rpm -ql softhsm.
Чему учимся¶
- Различать слот и инициализированный токен.
- Отличать открытый объект сертификата от защищённого закрытого ключа.
- Проверять права на операции и корректность PIN без экспериментов с блокировкой.
- Уметь удалять учебную среду, не затрагивая рабочие токены.
На реальном аппаратном токене процедуры инициализации и сброса выполняются строго по инструкции производителя: необдуманный сброс способен безвозвратно уничтожить закрытые ключи.