Использование шифров ГОСТ 2012 для связи с Честным Знаком из node.js

При попытке подключения с помощью node к https://api.mdlp.crpt.ru выдаёт:

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 Крипто-ПРО, который в системе установлен; тем не менее, ошибка сохраняется.

Можно ли в node.js при установлении связи указать свой ssl_ciphers, или иным способом (например каким-то специфичным npm-пакетом) добиться того, чтобы такое соединение заработало?

Более общий вопрос без связанной со страной конкретики задан в английской версии: https://stackoverflow.com/questions/63940218/use-a-custom-ssl-ciphers-in-node-js Не уверен, не запрещено ли это.

upd: есть предположение, что это связано с неправильной работой крипто-про. Разбираюсь.


Ответы (1 шт):

Автор решения: eri

Нода использует /usr/lib/libcrypto.so.1.1 для tls. Подгрузить напрямую криптопро не получится потому как /opt/cprocsp/cp-openssl/lib/amd64/libcrypto.so.1.0.0 с апи 1.0. Разве что пересобирать ноду с линковкой на cp-openssl

Второй способ это добавить некриптопрошный движек в системный опенссл

Как собрать описанно тут https://github.com/gost-engine/engine/blob/master/INSTALL.md

Потом запускай ноду с переменной OPENSSL_CONF в которой будет конфиг для запуска шифров гост.

Системный openssl.conf не трогай - когда я пробовал ломались apt и прочие программы.

Третий способ - заверни трафик в КриптоПро Stunnel

→ Ссылка