Автор: svmed Во-первых огромное спасибо за разъяснения, я пытаюсь разобраться с этой проблемой не первый месяц.
Пожалуйста.
Автор: svmed Каким образом можно добавить туда эту библиотеку? При использовании node.js с OpenSSL-конфигурацией, приведённой в
https://www.cryptopro.ru....aspx?g=posts&t=8544запуск самой среды проходит нормально, но при подключении возникает аналогичная ошибка или "unsupported algorithm". Требуется что-то сделать в Крипто-про?
В КриптоПро ничего не меняется. Скорее всего что-то не так с конфигурацией или просто "не та" версия openssl. Да, в определенные моменты разработчики OpenSSL что-то меняют и engine бывает за ними не успевает - так как тестирования совместимости с каждой версией нет, исправляется работа только когда об этом напишут в той теме. Потому выходит что на некоторых версиях OpenSSL не работает вообще. В итоге, надо провести диагностику несколькими командами:
позволяет определить версию на случай если "неудачная" из поддерживаемых ("1.1.0"/"1.1.1") или старые ("0.9.8"/"1.0.0"/"1.0.1"/"1.0.2"), которые не поддерживаются gostengy. Ключ a еще добавляет информацию, о том какие опции вкомпилированы при сборке. Например, с какой папки engine загружается если не указан в конфиге и с какой папки берется файл конфигурации. Файл конфигурации можно переопределить переменной окружения OPENSSL_CONF (на Windows для компьютера, для пользователя или конкретного экземпляра консоли).
позволяет определить если 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
интересует наличие строки в самом начале
Если строка есть, то ручная загрузка библиотеки успешна.
из вывода этой команды можно узнать загружены ли алгоритмы со словом 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 может не загрузиться или не добавить алгоритмы в список доступных из-за этого.