- Установить OpenSSL 1.1.0 или новее.
- Загрузите модуль интеграции (rtengine) с нашего сайта. Для OpenSSL 1.1.x необходима версия rtengine 1.x, для OpenSSL 3.x необходима версия rtengine 3.x.
Загрузите и установите библиотеку PKCS#11 с нашего сайта.
Модифицируем конфигурационный файл OpenSSL (для Linux: /
usr/lib/ssl/openssl.cnf
, в Windows файл находится в директории установки OpenSSL). Добавляем следующую информацию в начало файла:openssl_conf = openssl_def
и в конец файла:
[ openssl_def ] engines = engine_section [ engine_section ] rtengine = gost_section [ gost_section ] dynamic_path = /path/to/librtengine.so pkcs11_path = /path/to/librtpkcs11ecp.so rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP default_algorithms = CIPHERS, DIGEST, PKEY enable_rand = yes
Значения полей:
- dynamic_path — путь до библиотеки rtengine.
- pkcs11_path — путь до библиотеки librtpkcs11ecp.
- enable_rand — флаг, указывающий, что энтропия должна браться с токена (значение по-умолчанию no).
- rand_token — идентификатор токена откуда будет браться энтропия (в формате pkcs11 uri.)
Возможные компоненты идентификатора:
- manufacturer: ID производителя токена;
- model: модель токена;
- serial: серийный номер токена;
- token: метка токена (поле "label").
Работа с rtengine без токена
Для того, чтобы шифровать и выписывать ГОСТ сертификаты с помощью rtengine без подключенного Рутокена необходимо:
- Убрать из конфигурационного файла секцию
rand_token
. - Установить опцию
enable_rand
в значениеno
, для того, чтобы энтропия не бралась с токена.
Для систем на базе Windows все аналогично.
5. Создайте переменную среды OPENSSL_CONF
, записав туда путь до конфигурационного файла.
Для Linux, например, выполните, запустив bash :
export OPENSSL_CONF=/path/to/openssl.cnf
Для Windows, запустив cmd:
set OPENSSL_CONF=C:\path\to\openssl.cnf
Пример конфигурационного файла OpenSSL
# Динамическое подключение rtengine openssl_conf = openssl_def [ openssl_def ] engines = engine_section [ engine_section ] rtengine = rtengine_section [ rtengine_section ] dynamic_path = /path/to/librtengine.so pkcs11_path = /path/to/librtpkcs11ecp.so rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP default_algorithms = ALL enable_rand = yes # Настройки создания запросов на сертификат [ req ] prompt = no distinguished_name = req_distinguished_name req_extensions = ext # Сведения о владельце сертификата [ req_distinguished_name ] countryName = RU commonName = Ivanov emailAddress = ivanov@mail.ru stateOrProvinceName = Moscow # Расширения сертификата [ ext ] subjectSignTool = ASN1:FORMAT:UTF8,UTF8String:СКЗИ \"Рутокен ЭЦП 2.0\" extendedKeyUsage=emailProtection keyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment # Настройки удостоверяющего центра [ ca ] default_ca = CA_default [ CA_default ] dir = ./demoCA # папка УЦ database = $dir/index.txt new_certs_dir = $dir/newcerts # папка, куда кладутся новые сертификаты certificate = $dir/cacert.pem # сертификат УЦ serial = $dir/serial private_key = $dir/private/cakey.pem # закрытый ключ УЦ RANDFILE = $dir/private/.rand default_days = 365 # сколько дней будет действителен выданный сертификат default_crl_days = 30 default_md = md_gost12_256 # алгоритм хеширования по умолчанию policy = policy_any email_in_dn = no name_opt = ca_default cert_opt = ca_default copy_extensions = copy # Обязательность полей в запросе на сертификат [ policy_any ] countryName = supplied stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional