Node.js Версия: 11.2.0
ОС: debian
Область (установка, код, время выполнения, мета и т. Д.): Проблема с отсутствием метода сертификата клиента в tlshandshake
Модуль (и версия) (при необходимости): узел openssl tls clientCertEngine
Возникли проблемы с этим при попытке использовать аппаратный модуль безопасности, который хранит закрытый ключ.(не читаемый / не экспортируемый)
Без HSM проблем нет.Может быть, я неправильно вызываю clientCertEngine?Или есть проблема, не позволяющая нам ввести -keyform e?
, хотя использование s_client работает следующим образом:
openssl s_client -host myHost.com -port 3000 -key fake.key -cert device.crt -CAfile ca.crt -engine hsm_engine -keyform e
При работе клиентского узла tls connect:
_tls_common.js:204 c.context.setClientCertEngine(options.clientCertEngine);
Error: error:1412214B:SSL routines:SSL_CTX_set_client_cert_engine:no client cert method
at Object.createSecureContext (_tls_common.js:204:17)
at Object.connect (_tls_wrap.js:1205:48)
at Object. (/home/pi/test/tls.js:20:19)
at Module._compile (internal/modules/cjs/loader.js:722:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
at Function.Module._load (internal/modules/cjs/loader.js:552:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:775:12)
at startup (internal/bootstrap/node.js:300:19)
И код JS
const tls = require('tls');
const fs = require('fs');
const options = { // key: null //cannot be exported nor read. Ive tried with both null and removed key entirely
cert: fs.readFileSync('client.crt'),
clientCertEngine: '/path/to/hsm/.so file',
ca: [fs.readFileSync('ca.crt')], };
const socket =tls.connect({
host: 'myHost.com',
port: 3000 },
options, () => { console.log('client connected', socket.authorized ? 'authorized' : 'unauthorized');
process.stdin.pipe(socket);
process.stdin.resume(); });
socket.setEncoding('utf8');
socket.on('data', (data) => { console.log(data); }); socket.on('end', () => { console.log('server ends connection'); });