Вариант 2: gost_capi.dll (для OpenSSL <1.1.0) или gostengy.dll (для OpenSSL >= 1.1.0) - библиотека от КриптоПро для работы установленного КриптоПро CSP через интерфейсы OpenSSL (работает только при установленном КриптоПро CSP, т.к. вся работа с ГОСТ будет осуществляться КриптоПро CSP, но опосредованно через интерфейсы OpenSSL). Важно! | Развитие данного продукта прекращено. Также нет сведений о поддержке актуальной версии OpenSSL 3.0. |
Аналогично, как и с библиотекой gost.dll, версия библиотеки зависит от используемой версии OpenSSL: - для OpenSSL < 1.1.0: необходимо использовать библиотеку gost_capi, НЕ поддерживает ГОСТ 2012
- для OpenSSL >= 1.1.0: необходимо использовать библиотеку gostengy, поддерживает ГОСТ 2012
Скачать необходимые версии библиотеки можно на сайте КриптоПро . Более подробное описание использования можно найти у них же на форуме. Важно! | Необходимо использовать библиотеку соответствующую разрядности используемого приложения, которое будет использовать данную библиотеку. Например, если настраивается серверная сторона Сервиса, то выбирается в соответствии с его разрядностью, если настраивается клиентская сторона (приложение для удаленного доступа), то в соответствии с его разрядностью (на текущий момент только Win32). |
Развертывание : - Расположить необходимую библиотеку поддержки алгоритмов ГОСТ нужной разрядности (gost_capi.dll для OpenSSL <1.1.0 или gostengy.dll в случаае использования OpenSSL >= 1.1.0) рядом с исполняемыми файлами, которые будут ее использовать. В случае использования Win64 разрядности сервиса - это подкаталог WIN64.
Создать файл конфигурации OpenSSL: 01openssl_conf = openssl_def
02
03[openssl_def]
04engines = engine_section
05
06[engine_section]
07gost = gostengy_section
08
09[gostengy_section]
10engine_id = gostengy
11dynamic_path = ./gostengy.dll
12default_algorithms = CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1
В указанном примере файла конфигурации предполагается, что библиотека поддержки алгоритмов ГОСТ находится рядом с исполняемыми файлами. Но файл конфигурации может быть расположен в ином месте. В таком случае необходимо указать полный, а не относительный путь к библиотеке. Кстати, в качестве разделителя каталогов пути необходимо использовать прямой слэш "/" как в Unix, а не обратный, как в Windows, либо экранировать обратные слэши еще одним обратным слэшем - "\\". В случае использования существующего файла конфигурации, например поставляемого с самим OpenSSL, необходимо 1-ю строчку (openssl_conf = openssl_def) вставить в начало этого файла, а остальные строки в самый конец файла. Указанный файл конфигурации является примером, и может быть изменен пользователем в зависимости от требуемых настроек. Кстати | Подобным образом возможно подключить любые другие расширения (engine) для OpenSSL. Например, в случае если приватный ключ сертификата хранится на аппаратном носителе (USB токен, смарт карт) который не допускает их экспортирования в файл, но при этом предосталяет возможность их использования через свой интерфейс. Обычно в таких случаях криптопровайдер распространяет расширения для интеграции с OpenSSL. В таких случаях, в процессе конфигурирования вместо указания пути к файлу (Настройки протокола HTTPS, поле Закрытый ключ) необходимо указать через какое расширение можно обращаться к закрытому ключу: engine:id расширения:путь к закрытому ключу согласно документации криптопровайдера
Например: engine:gostengy:techmill.ru
|
- Установить системную переменную окружения ОС с именем OPENSSL_CONF и значением указывающим полный путь к файлу конфигурации OpenSSL.
Кстати | В случае настройки клиента удаленного доступа для приложения Win32, это удобно настроить (как подключение файл конфигурации OpenSSL, так и установка переменной окружения OPENSSL_CONF) в процессе конфигурирования на странице Дополнительные модули и переменые окружения в составе клиента удаленного доступа. |
- В связи с тем, что КриптоПро не работает с файлами закрытых ключей находящихся в файлах, необходимо использовать приватный ключ находящийся в одном из следующих мест где криптопровайдер КриптоПро сможет его найти и использовать:
- системное хранилище сертификатов Windows (certmgr.msc) - необходимо предварительно импортировать сертификат содержащий приватный ключ одним из штатных способов
- хранилища сертификатов самого КриптоПро - необходимо предварительно импортировать сертификат содержащий приватный ключ с помощью инструментов КриптоПро, наприме утилиты certmgr из штатной поставки КриптоПро
- аппаратный носитель (USB токен, смарт карт) содержащий приватный ключ
В любом из вышеперечисленном варианте, путь к закрытому ключу нужно указывать не как к файлу, а с помощью расширения для OpenSSL от КриптоПро (gost_capi или gostengy), например - engine:gostengy:techmill.ru, т.е. по шаблону engine:gost_capi или gostengy:FQDN указанное в сертификате (доменное имя). При непосредственном использовании этого ключа сам криптопровайдер определит его местонахождение, и при необходимости будет иницировать интерактивный процесс запроса разрешения на использование указанного ключа и его пароля. Но в любом случае, приватный ключ должен быть доступен КриптоПро и находиться в одном из вышеуказанных хранилищах, а не в файле.
Но т.к. при конфигурировании текущего сервиса на странице Настройки протокола HTTPS, поле Закрытый ключ принимает только путь к файлу и ничего более, то указание пути в формате engine:gostengy:FQDN не позволит сохранить введенное значение. Для решения этого момента, необходимо, в процессе конфигурации указать путь к какому-то другому файлу, например к файлу сертификату домена (открытый ключ), а затем после конфигурирования, в файле конфигурации текущего сервиса MillAppServer.conf, необходимо заменить введеное значение в формате engine:gostengy:FQDN. Для этого в элементе /config/object[@class="{91D7A767-7222-4463-BC7F-AD40589E3426}"] необходимо найти и изменить значение value="..." в узле <param name="PrivateKeyFile" value="введенное ранее значение"/> на необходимое в формате engine:gostengy:FQDN, например <param name="PrivateKeyFile" value="engine:gostengy:techmill.ru"/>. Остальные файлы сертификата (сертификат центра сертификации, сертификат домена), по прежнему, необходимо использовать в виде файлов и соответственно при конфигурировании указывать как пути к файлам в файловой системе.
- В файле конфигурации текущего сервиса MillAppServer.conf, который находится рядом с исполняемым файлом в зависимости от используемой разрядности, в элементе /config/object[@class="{91D7A767-7222-4463-BC7F-AD40589E3426}"] найти и изменить (или в случае его отсутствия, добавить) узел <param name="CipherList" value="GOST2012-GOST8912-GOST8912 GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89"/> для поддержки всех версий ГОСТ - 2012, 2001 и 94, либо <param name="CipherList" value="GOST2012-GOST8912-GOST8912"/> для поддержки только версии ГОСТ 2012.
В случае проблем с использованием настроенного и запущенного сервиса, для проверки его работоспособности рекомендуется использовать утилиту openssl в режиме клиента TLS, с помощью команды openssl s_client -connect 127.0.0.1:443. В случае успешного соединения с сервером в выводе консоли будет указана вся информация об установленном соединении, такая как сертификат, версия протокола TLS, используемый шифр и многое другое. Перед использованием OpenSSL утилиты необходимо аналогично обеспечить настройку файла конфигурации OpenSSL, как указано в пункте 2 и установить системную переменную окружения ОС с именем OPENSSL_CONF, как указано в пункте 3. |