ВНИМАНИЕ! Используйте OpenSSL версии 1.1.0 или новее. Для версии OpenSSL 3.х необходимо использовать rtengine 3.х
Загрузите модуль интеграции (rtengine) с нашего сайта.
Загрузите и установите библиотеку PKCS#11 с нашего сайта.
Установить OpenSSL 1.1.0 или новее.
Модифицируем конфигурационный файл 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