Использование шифров ГОСТ 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 шт):
Нода использует /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