ВНИМАНИЕ! Используйте OpenSSL версии 1.1.0 или новее
Загрузите модуль интеграции (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
MODULE_PATH = /path/to/librtpkcs11ecp.so
RAND_TOKEN = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP
default_algorithms = CIPHERS, DIGEST, PKEY, RAND
dynamic_path
— путь до библиотеки rtengine
.
MODULE_PATH
— путь до библиотеки librtpkcs11ecp
.
RAND_TOKEN
— идентификатор токена откуда будет браться энтропия (в формате pkcs11 uri.)
Возможные компоненты идентификатора:
manufacturer: ID производителя токена;
model: модель токена;
serial: серийный номер токена;
token: метка токена (поле "label").
Работа с rtengine без токена
Для того, чтобы шифровать и выписывать ГОСТ сертификаты с помощью rtengine без подключенного Рутокена необходимо:
- Убрать из конфигурационного файла секцию
RAND_TOKEN,
чтобы энтропия не бралась с Рутокена. - Убрать опцию
RAND
изdefault_algorithms
.
Для систем на базе 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 = gost_section
[ gost_section ]
dynamic_path = /path/to/librtengine.so
MODULE_PATH = /path/to/librtpkcs11ecp.so
RAND_TOKEN = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;serial=2adc8d87
default_algorithms = CIPHERS, DIGEST, PKEY, RAND
# Настройки создания запросов на сертификат
[ 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