Центр удаленного доступа ((раздел целиком))

Центр удаленного доступа- Использование SSL сертификатов c ГОСТ алгоритмами (раздел целиком) (29.04.2026) | (одним файлом)

Использование SSL сертификатов c ГОСТ алгоритмами
На текущий момент существует 2 варианта реализации ГОСТ алгоритмов, которые может использовать OpenSSL, и как следствие, использоваться текущим сервисом:

1. gost.dll - open source библиотека
Вариант 1: gost.dll - open source библиотека, которая раньше поставлялась вместе с OpenSSL, но начиная с версии OpenSSL 1.1, она была исключена из его состава, и оформилась в виде отдельного продукта https://github.com/gost-engine/engine . Поддержка алгоритмов ГОСТ 2001 имеется во всех версиях библиотеки gost.dll. Однако поддержка алгоритмов ГОСТ 2012 реализована только в версиях, совместимых с OpenSSL >= 1.1.0. Библиотека gost.dll должна использоваться только с соответствующей ей версией OpenSSL: для OpenSSL < 1.1.0: берется из поставки самого OpenSSL, НЕподдерживает ГОСТ 2012 для OpenSSL >= 1.1.0, но < 3.0: собирается самостоятельно из исходников (https://github.com/gost-engine/engine, необходимо выбрать релиз соответсвующий используемой версии OpenSSL), поддерживает ГОСТ 2012 для OpenSSL >= 3.0: также собирается самостоятельно из исходников (https://github.com/gost-engine/engine, необходимо выбрать релиз соответсвующий используемой версии OpenSSL), поддерживает ГОСТ 2012 В релизах сервиса до сентября 2020 включительно, использовались библиотеки OpenSSL 1.0.2. Поэтому возможно использовать библиотеку gost.dll из самого инталлятора OpenSSL, либо можно скачать соответствующую библиотеку с нашего сайта: Win32: https://techmill.ru/paruspub/parus8.5.6.1-2020.09/gost/gost.dll Win64: https://techmill.ru/paruspub/parus8.5.6.1-2020.09/gost/win64/gost.dll В релизах сервиса до января 2024 включительно, поставлялись библиотеки OpenSSL версии 1.1.1. Соответствующая этой версии библиотека gost.dll может быть собрана самостоятельно из исходников. Либо воспользоваться собранной нами версией для Windows: Win32: https://techmill.ru/paruspub/current/gost/gost.dll https://techmill.ru/paruspub/parus8.5.6.1-2020.09/gost/gost.dll Win64: https://techmill.ru/paruspub/current/gost/win64/gost.dll https://techmill.ru/paruspub/parus8.5.6.1-2020.09/gost/win64/gost.dll В релизах текущей версии сервиса, поставляются библиотеки OpenSSL версии 3.3.0. Соответствующая этой версии библиотека для ГОСТ алгоритмов может быть собрана самостоятельно из исходников. Либо можно воспользоваться собранной нами версией для Windows: Win32: https://techmill.ru/paruspub/current/gost/3.0/gost.dll https://techmill.ru/paruspub/current/gost/3.0/gostprov.dll Win64: https://techmill.ru/paruspub/current/gost/3.0/WIN64/gost.dll https://techmill.ru/paruspub/current/gost/3.0/WIN64/gostprov.dll Во всех релизах текущего сервиса для Linux, библиотеки OpenSSL не поставляются в составе продукта, их необходимо самостоятельно собрать локально по месту использования, либо установить с помощью менеджера пакетов Linux. При работе конфигуратор подскажет как это сделать. Также, для Linux потребуется самостоятельная сборка библиотеки для ГОСТ, для этого можно воспользоваться исходной инструкцией - https://github.com/gost-engine/engine/blob/master/INSTALL.md.
Важно! | Необходимо использовать библиотеку соответствующую разрядности используемого приложения, которое будет использовать данную библиотеку. Например, если настраивается серверная сторона Сервиса, то выбирается в соответствии с его разрядностью, если настраивается клиентская сторона (приложение для удаленного доступа), то в соответствии с его разрядностью (на текущий момент только Win32).
2. Развертывание : Расположить библиотеку gost.dll, а в случае с OpenSSL 3.0, еще и gostprov.dll, нужной разрядности в каталог установки текущего сервиса, рядом с исполняемыми файлами, которые будут ее использовать. В случае использования Win64 разрядности сервиса - это подкаталог WIN64. Создать файл конфигурации OpenSSL (в случае с OpenSSL 3.0, последнюю строчку с CRYPT_PARAMS=... рекомендуется опустить и не указывать), например openssl.conf:
       01openssl_conf = openssl_def
       02
       03[openssl_def]
       04engines = engine_section
       05
       06[engine_section]
       07gost = gost_section
       08
       09[gost_section]
       10engine_id = gost
       11dynamic_path = ./gost.dll
       12default_algorithms = ALL
       13CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
   В указанном примере файла конфигурации предполагается, что библиотеки поддержки алгоритмов ГОСТ находятся рядом с исполняемыми файлами. Но файл конфигурации может быть расположен в ином месте. В таком случае необходимо указать полный, а не относительный путь к библиотеке gost.dll. Кстати, в качестве разделителя каталогов пути необходимо использовать прямой слэш "/" как в Unix, а не обратный, как в Windows, либо экранировать обратные слэши еще одним обратным слэшем - "\\". В случае использования существующего файла конфигурации, например при использовании полноценно установленного OpenSSL (а не используемого из состава поставки) в составе которого имеется свой файл конфигурации, вышеуказанный блок необходимо вставить после строки "oid_section = new_oids". Указанный файл конфигурации является примером, и может быть изменен пользователем в зависимости от требуемых настроек.
   Кстати | Подобным образом возможно подключить любые другие расширения (engine) для OpenSSL. Например, в случае если приватный ключ сертификата хранится на аппаратном носителе (USB токен, смарт карт) который не допускает их экспортирования в файл, но при этом предосталяет возможность их использования через свой интерфейс. Обычно в таких случаях криптопровайдер распространяет расширения для интеграции с OpenSSL. В таких случаях, в процессе конфигурирования вместо указания пути к файлу (Настройки протокола HTTPS, поле Закрытый ключ) необходимо указать через какое расширение можно обращаться к закрытому ключу:
       engine:id расширения:путь к закрытому ключу согласно документации криптопровайдера
   Например:
       engine:gostengy:techmill.ru
3. Установить системную переменную окружения ОС с именем OPENSSL_CONF и значением указывающим полный путь к файлу конфигурации OpenSSL.
   Кстати | В случае настройки клиента удаленного доступа для приложения Win32, это удобно настроить (как подключение файл конфигурации OpenSSL, так и установка переменной окружения OPENSSL_CONF) в процессе конфигурирования на странице Дополнительные модули и переменые окружения в составе клиента удаленного доступа.
При конфигурировании, на странице Параметры сетевых настроек - Настройки протокола HTTPS, укажите значение в параметре Набор шифров для TLS 1.2 и ранее: GOST2012-GOST8912-GOST8912 GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89, для поддержки всех версий ГОСТ - 2012, 2001 и 94, либо значение GOST2012-GOST8912-GOST8912, для поддержки только версии ГОСТ 2012. В случае необходимости поддержки ГОСТ 2015, укажите значение в параметре Набор шифров для TLS 1.3+: TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L TLS_GOSTR341112_256_WITH_MAGMA_MGM_L TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S TLS_GOSTR341112_256_WITH_MAGMA_MGM_S. В случае проблем с использованием настроенного и запущенного сервиса, для проверки его работоспособности рекомендуется использовать утилиту openssl в режиме клиента TLS, с помощью команды openssl s_client -connect 127.0.0.1:443. В случае успешного соединения с сервером в выводе консоли будет указана вся информация об установленном соединении, такая как сертификат, версия протокола TLS, используемый шифр и многое другое. Для проверки корректности созданного файла конфигурации OpenSSL, и самой загрузки ГОСТ библиотеки, можно воспользоваться командой openssl engine. В случае правильной настройки, среди строк вывода будет строка "(gost) Reference implementation of GOST engine". Перед использованием OpenSSL утилиты необходимо аналогично обеспечить настройку файла конфигурации OpenSSL, как указано в пункте 2 и установить системную переменную окружения ОС с именем OPENSSL_CONF, как указано в пункте 3.

2. gost_capi.dll или gostengy.dll - библиотека от КриптоПро (развитие прекращено)
Вариант 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).
2. Развертывание : Расположить необходимую библиотеку поддержки алгоритмов ГОСТ нужной разрядности (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
3. Установить системную переменную окружения ОС с именем 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. При конфигурировании, на странице Параметры сетевых настроек - Настройки протокола HTTPS, укажите значение в параметре Набор шифров для TLS 1.2 и ранее: GOST2012-GOST8912-GOST8912 GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89, для поддержки всех версий ГОСТ - 2012, 2001 и 94, либо значение GOST2012-GOST8912-GOST8912, для поддержки только версии ГОСТ 2012. В случае необходимости поддержки ГОСТ 2015, укажите значение в параметре Набор шифров для TLS 1.3+: TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L TLS_GOSTR341112_256_WITH_MAGMA_MGM_L TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S TLS_GOSTR341112_256_WITH_MAGMA_MGM_S. В случае проблем с использованием настроенного и запущенного сервиса, для проверки его работоспособности рекомендуется использовать утилиту openssl в режиме клиента TLS, с помощью команды openssl s_client -connect 127.0.0.1:443. В случае успешного соединения с сервером в выводе консоли будет указана вся информация об установленном соединении, такая как сертификат, версия протокола TLS, используемый шифр и многое другое. Перед использованием OpenSSL утилиты необходимо аналогично обеспечить настройку файла конфигурации OpenSSL, как указано в пункте 2 и установить системную переменную окружения ОС с именем OPENSSL_CONF, как указано в пункте 3.

3. Выбор браузеров для взаимодействия с веб-серверами использующими SSL сертификаты с ГОСТ алгоритмами
- Для взаимодействия браузера с веб-серверами, использующими SSL сертификаты с ГОСТ алгоритмами, необходимо, чтобы эти браузеры "понимали" эти алгоритмы. "Понимание" криптоалгоритмов, обеспечивается путем взаимодействием браузера с определенным криптопровайдером, через ту или иную инфраструктуру криптопровайдеров. На ОС Windows инфраструктура криптопровайдеров обеспечивается Microsoft CryptoApi. Различные браузеры могут использовать какую-то определенную инфраструктуру криптопровайдеров. Например Internet Explorer может использовать только Microsoft CryptoApi, а Chrome и Firefox - только NSS. Таким образом, для работы с веб серверами, использующими SSL ГОСТ-сертификатами требуется установленный на клиенте криптопровайдер с поддержкой ГОСТ, и браузер, который умеет опосредовано через инфраструктуру, использовать этот криптопровайдер. Рассмотрим на примере продуктов CryptoPro (это 1 из примеров, по аналогии могут быть использованы любые другие криптопровайдеры, добавляющиеся в Microsoft CryptoApi, и реализующие поддержку ГОСТ алгоритмов). Установка CryptoPro CSP добавляет в Microsoft CryptoApi криптопровайдер, реализующий поддержку ГОСТ алгоритмов: Internet Explorer - полная поддержка. Поддерживаются как ГОСТ 2012, так и предыдущие алгоритмы. Firefox, непосредственно официальные сборки - не поддерживаются, но можно использовать третьесторонние сборки, например КриптоПро Fox.
  Важно! | Установка браузера КриптоПро Fox, должна производится после установки криптопровайдера. КриптоПро Fox не подерживает сертификаты с алгоритмами ГОСТ 2012.
Если после установки КриптоПро Fox - соединение с сервером не устанавливается с кодом ошибки "SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT", то необходимо проверить, что модуль для связи браузера с КриптоПро CSP, загружен браузером: Открыть Меню -> Настройки -> Дополнительные -> Сертификаты -> Устройства защиты В открывшемся диалоге, найти модуль CryptoPro PKCS11, у которого должен быть дочерний модуль CryptoPro Token. Если дочернего модуля нет, то необходимо переустановить данный браузер. Если после установки КриптоПро Fox - соединение с сервером считается ненадежным, то необходимо сделать изменения в его настройках: Открыть вкладку с адресом about:config Найти настройку с именем security.tls.version.max, и изменить значение с 3 на 2 Chrome - не поддерживается из-за использования им криптопровайдеров NSS. Однако можно использовать стороннюю сборку Chromium от КриптоПро - Chromium Gost , в которую включена возможность поддержки ГОСТ алгоритмов, в случае работы совместно с КриптоПро CSP. Поддерживаются как ГОСТ 2012, так и предыдущие алгоритмы. Chromium Gost является рекомендуемым браузером в случае использования ГОСТ сертификатов .