Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline svmed  
#1 Оставлено : 22 сентября 2020 г. 16:52:56(UTC)
svmed

Статус: Новичок

Группы: Участники
Зарегистрирован: 17.09.2020(UTC)
Сообщений: 2
Российская Федерация
Откуда: Санкт-Петербург

Возникла следующая проблема.
При попытке установить https-соединение с сервером (ИС МДЛП) возникает "ошибка рукопожатия", дословно
Код:

write EPROTO 10284:error:14094410:
SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:
c:\ws\deps\openssl\openssl\ssl\record\rec_layer_s3.c:1544:SSL alert number 40


Известно, что для подключения к этому сайту требуется ssl_ciphers: GOST2012-GOST8912-GOST8912 . Он реализован в CSP Крипто-ПРО, который в системе установлен; тем не менее, ошибка сохраняется. Ситуация повторяется на нескольких разных компьютерах.

Чем это может быть вызвано? Может ли это быть связано с тем, что "Выбор типа CSP" на вкладке "Алгоритмы" панели управления CSP находится в положении "GOST R 34.10-2001" и не сохраняется, если её переключить на ГОСТ-2012?
Online Андрей *  
#2 Оставлено : 22 сентября 2020 г. 17:33:59(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Здравствуйте.

А используете openssl... ?
Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#3 Оставлено : 23 сентября 2020 г. 5:15:36(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: svmed Перейти к цитате
Может ли это быть связано с тем, что "Выбор типа CSP" на вкладке "Алгоритмы" панели управления CSP находится в положении "GOST R 34.10-2001" и не сохраняется, если её переключить на ГОСТ-2012?
Абсолютно дело не в этом. Все три перечисленные там криптопровайдера доступны одновременно, выбирает конкретная программа, обращающаяся к КриптоПро. Раскрывающийся список исключительно дизайнерское решение для выбора что просматриваете. Наверно многим стало бы понятнее если вместо раскрывающегося списка сделали три вкладки, но там просто нет места на 3 вкладки.
Автор: svmed Перейти к цитате
... GOST2012-GOST8912-GOST8912 ... реализован в CSP Крипто-ПРО, который в системе установлен; тем не менее, ошибка сохраняется. Ситуация повторяется на нескольких разных компьютерах.

Чем это может быть вызвано?
Если используете openssl (или любые заморские решения на основе openssl / libeay32 / ssleay32 / libcrypto-1_1 / libssl-1_1), то кто Вам сказал что будет работать прямо из коробки? Это не сертифицированное решение.

Для работы openssl c КриптоПро нужно добавить к openssl дополнительную библиотеку-мостик. В терминах openssl это называется engine. Для поддержки гост-2012 в openssl с помощью КриптоПро CSP библиотека engine называется "gostengy".


Обратите внимание на такие моменты gostengy: 1) для работы с ней нужна версия библиотек openssl 1.1.x, c 1.0.x работать не будет. Для *nix есть специальная версия openssl от КриптоПро на случай если не хотите менять системный openssl, но надо будет указать в своей программе какой openssl использовать. Для Windows соответственно есть выбор использовать версию openssl оригинальную или специальную от КриптоПро. В любом случае, подвох в том, что половина зарубежных программ использующих https через openssl 1.0.х крашатся когда видят в конфигурации библиотеку для 1.1.x и приходится делать отдельный конфиг с гостом.
2) ключ должен быть в контейнере КриптоПро. Если конвертировали в формат openssl или генерировали ключ в openssl по тьме старых интернет-руководств, то использовать его эта библиотека не сможет. Импортировать закрытый ключ из файла или наоборот сохранить в файл не получится (в файле будет не ключ). Напротив, решения в спойлере выше смогут это сделать, но это уже не имеет отношения к КриптоПро.
3) сертификат как и при обычной работе с КриптоПро должен быть установлен в хранилище Личные с привязкой к контейнеру. Важно чтобы это было сделано для пользователя под которым запускаете openssl.
4) Поддерживаются команды openssl не все, а только принимающие параметры -engine gostengy -keyform engine (да, у пары команд openssl допустимы только -keyform pem и -keyform der, а у каких-то нельзя указать -engine - такие команды не получится использовать), но зато можно указывать вместо имени файла с ключом имя контейнера КриптоПро или отпечаток сертификата.

Подробно в соседнем разделе.

Отредактировано пользователем 23 сентября 2020 г. 5:39:33(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Андрей * оставлено 23.09.2020(UTC)
Offline svmed  
#4 Оставлено : 24 сентября 2020 г. 19:48:37(UTC)
svmed

Статус: Новичок

Группы: Участники
Зарегистрирован: 17.09.2020(UTC)
Сообщений: 2
Российская Федерация
Откуда: Санкт-Петербург

Во-первых огромное спасибо за разъяснения, я пытаюсь разобраться с этой проблемой не первый месяц.

Цитата:
Если используете openssl (или любые заморские решения на основе openssl / libeay32 / ssleay32 / libcrypto-1_1 / libssl-1_1)

Если быть точным, я использую для выполнения запросов node.js. Насколько я понимаю, openssl там используется.
Цитата:
Для работы openssl c КриптоПро нужно добавить к openssl дополнительную библиотеку-мостик. Для поддержки гост-2012 в openssl с помощью КриптоПро CSP библиотека engine называется "gostengy".

Каким образом можно добавить туда эту библиотеку? При использовании node.js с OpenSSL-конфигурацией, приведённой в
https://www.cryptopro.ru....aspx?g=posts&t=8544
запуск самой среды проходит нормально, но при подключении возникает аналогичная ошибка или "unsupported algorithm". Требуется что-то сделать в Крипто-про?
Offline two_oceans  
#5 Оставлено : 25 сентября 2020 г. 7:22:54(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: svmed Перейти к цитате
Во-первых огромное спасибо за разъяснения, я пытаюсь разобраться с этой проблемой не первый месяц.
Пожалуйста.
Автор: svmed Перейти к цитате
Каким образом можно добавить туда эту библиотеку? При использовании node.js с OpenSSL-конфигурацией, приведённой в https://www.cryptopro.ru....aspx?g=posts&t=8544
запуск самой среды проходит нормально, но при подключении возникает аналогичная ошибка или "unsupported algorithm". Требуется что-то сделать в Крипто-про?
В КриптоПро ничего не меняется. Скорее всего что-то не так с конфигурацией или просто "не та" версия openssl. Да, в определенные моменты разработчики OpenSSL что-то меняют и engine бывает за ними не успевает - так как тестирования совместимости с каждой версией нет, исправляется работа только когда об этом напишут в той теме. Потому выходит что на некоторых версиях OpenSSL не работает вообще. В итоге, надо провести диагностику несколькими командами:
Код:
openssl version -a

позволяет определить версию на случай если "неудачная" из поддерживаемых ("1.1.0"/"1.1.1") или старые ("0.9.8"/"1.0.0"/"1.0.1"/"1.0.2"), которые не поддерживаются gostengy. Ключ a еще добавляет информацию, о том какие опции вкомпилированы при сборке. Например, с какой папки engine загружается если не указан в конфиге и с какой папки берется файл конфигурации. Файл конфигурации можно переопределить переменной окружения OPENSSL_CONF (на Windows для компьютера, для пользователя или конкретного экземпляра консоли).
Код:
openssl engine

позволяет определить если gostengy загрузилась, в норме должно выдать что-то вроде
Код:
(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support
(gostengy) CryptoPro GostEngy ($Revision: 185515 $)

если строки с gostengy нет - библиотека не загрузилась автоматически, но если нет ошибок, возможно будет работать "в ручном режиме" (хотя для Вашей задачи наверно нужен именно автоматический). Там может быть ошибка что библиотека не найдена - тогда править конфиг на то место, где реально лежит скачанная/установленная пакетом библиотека. Если есть ошибка с "version incompatibility" это признак что версия OpenSSL неправильная.
Код:
Error configuring OpenSSL
140449351493264:error:260B6091:engine routines:DYNAMIC_LOAD:version incompatibility:eng_dyn.c:507:
140449351493264:error:260BC066:engine routines:INT_ENGINE_CONFIGURE:engine configuration error:eng_cnf.c:191:section=gost_section, name=dynamic_path, value=/opt/cprocsp/cp-openssl-1.1.0/lib/amd64/engines/libgostengy.so
140449351493264:error:0E07606D:configuration file routines:MODULE_RUN:module initialization error:conf_mod.c:223:module=engines, value=engine_section, retcode=-1

Если ошибки нет, то еще вариант выполнить команду с ручной загрузкой вроде просмотра сертификата
Код:
openssl x509 -engine gostengy -text -nocert -in 1.cer -inform DER

интересует наличие строки в самом начале
Код:
engine "gostengy" set.
Если строка есть, то ручная загрузка библиотеки успешна.
Код:
openssl ciphers

из вывода этой команды можно узнать загружены ли алгоритмы со словом GOST. Имеет смысл только если библиотека загрузилась автоматом, так как здесь engine указать нельзя. на Windows для поиска подстроки дописывается в конце findstr, на *nix grep. Еще есть команда замены двоеточия на переводы строки, но так сразу не вспомню.
Код:
openssl ciphers | findstr GOST


С конфигурацией на Windows, например, очень часто приходится использовать экранирование в пути вроде D:\\Others2\\engines\\gostengy.dll А на *nix вместо dll расширение so, и переносить собранную библиотеку "на другую сторону" нельзя. Это особенности операционной системы и реализации OpenSSL для конкретной операционной системы, которые предполагается уже известны настройщику (который по идее должен собрать OpenSSL из исходников). Ну а если скачаны откуда-то, то приходится на ощупь подбирать чего там сборщик заложил.

Вот только честно я не знаю, как вызвать openssl который в node.js, если там реализация через библиотеки OpenSSL еще очень важно как их инициализуете, так как engine может не загрузиться или не добавить алгоритмы в список доступных из-за этого.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.