← Cloudflare SSL/TLS / ssl / keyless-ssl / hardware-security-modules
Конфигурация
Чтобы начать работу с токеном PKCS#11, его нужно инициализировать закрытым ключом, PIN-кодом и меткой токена. Порядок действий зависит от конкретного аппаратного устройства, поэтому следуйте инструкциям производителя. Также потребуется найти путь к вашему module, разделяемый объектный файл (.so). После инициализации устройства вы можете запросить его, чтобы проверить метку токена, с помощью:
pkcs11-tool --module <module path> --list-token-slotsТакже стоит проверить метку приватного ключа, который вы импортировали (или сгенерировали). Выполните следующую команду и найдите Private Key Object:
pkcs11-tool --module <module path> --pin <pin> \
--list-token-slots --login --list-objectsТеперь у вас есть вся информация, необходимая для использования вашего токена PKCS#11 с сервером Keyless, добавив в private_key_stores раздел в файле конфигурации. Вы можете указать пары ключей, к которым Keyless должен иметь доступ, в файл конфигурации с использованием URI PKCS#11 ↗ формате.
PKCS#11 URI
URI PKCS#11 представляет собой последовательность пар атрибут-значение, разделенных точкой с запятой и образующих одноуровневый компонент пути, за которым может следовать запрос. Общий вид такой записи:
pkcs11:path-component[?query-component]Компонент пути URI содержит атрибуты, идентифицирующие ресурс. Компонент запроса может содержать несколько атрибутов, которые могут понадобиться для получения ресурса, идентифицированного компонентом пути URI. Атрибуты в компоненте пути разделяются ; символа, а атрибуты в компоненте запроса используют & в качестве разделителя. Все атрибуты кодируются в формате URL.
Для Keyless необходимо указать следующие три атрибута:
- Модуль: используйте
module-pathчтобы найти библиотеку модуля PKCS#11. - Токен: используйте
serial,slot-id, илиtokenчтобы указать токен PKCS#11. - Слот: используйте
idилиobjectчтобы указать пару ключей PKCS#11.
Для некоторых модулей атрибут запроса max-sessions необходим, чтобы не допустить открытия слишком большого числа сессий к модулю. Некоторые дополнительные атрибуты, например pin-value, может понадобиться в зависимости от ситуации. Подробнее см. в документации к вашему модулю PKCS#11.
Примеры
Ниже приведены примеры URI PKCS#11 для ключей, хранящихся на различных модулях:
private_key_stores:
- uri: pkcs11:token=SoftHSM2%20RSA%20Token;id=%03?module-path=/usr/lib64/libsofthsm2.so&pin-value=1234
- uri: pkcs11:token=accelerator;object=thaleskey?module-path=/opt/nfast/toolkits/pkcs11/libcknfast.so
- uri: pkcs11:token=YubiKey%20PIV;id=%00?module-path=/usr/lib64/libykcs11.so&pin-value=123456&max-sessions=1
- uri: pkcs11:token=elab2parN;id=%04?module-path=/usr/lib/libCryptoki2_64.so&pin-value=crypto1Ограничения
Пока одновременно можно использовать только один модуль PKCS#11, поэтому, если ваши ключи хранятся на нескольких HSM, рекомендуем использование p11-glue для объединения доступа через один модуль ↗.