- Установить 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). Добавляем следующую информацию в начало файла:
Code Block openssl_conf = openssl_def
и и в конец файла:
Code Block |
---|
...
[ 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").
Info | |
---|---|
title | Работа с rtengine без токена
|
...
5. Создайте переменную среды OPENSSL_CONF
, записав туда путь до конфигурационного файла.
Для Linux, например, выполните, запустив bash :
Code Block |
---|
export OPENSSL_CONF=/path/to/openssl.cnf |
Для Windows, запустив cmd:
Code Block |
---|
set OPENSSL_CONF=C:\path\to\openssl.cnf |
Пример конфигурационного файла OpenSSL
Code Block |
---|
# Динамическое подключение 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 |