Я пытаюсь установить TLSSocket
соединение с сервером Electrum в Node. Для этого я хочу разрешить самоподписанные сертификаты, но я хочу уведомлять / регистрировать, когда соединение использует самоподписанный сертификат.
Чтобы разрешить самоподписанные сертификаты, я использую опцию rejectUnauthorized: false
при подключении. Это работает, как ожидалось. Однако в соответствии с документами Node TLS подключенный сокет должен сообщать как флаг authorized
, так и authorizationError
, когда авторизация не выполняется. Похоже, об этом сообщается неправильно.
Это простой пример кода, демонстрирующий мою проблему:
const tls = require('tls');
// const host = 'bch.imaginary.cash';
const host = 'electroncash.de'
const port = 50002;
const socket = tls.connect(port, host, { rejectUnauthorized: false });
socket.on('error', console.log);
socket.on('connect', () => {
console.log(`Successfully connected to ${host}:${port}`);
console.log(socket.authorized);
console.log(socket.authorizationError);
})
Я запускал этот код на двух разных серверах: bch.imaginary.cash
который имеет сертификат, подписанный ЦС, и electroncash.de
с самоподписанным сертификатом. При запуске этого кода с rejectUnauthorized
, установленным на false
, оба хоста приводят к следующему:
Successfully connected to electroncash.de:50002
false
null
Я ожидал, что соединение, подписанное CA, сообщит authorized
как true
, и я ожидал бы самоподписанное соединение, чтобы сообщить authorizationError
как ненулевое.
Я также попытался запустить тот же код с rejectUnauthorized
, установленным на true
, и в этом случае соединение с CA-подписью прошло успешно (но все еще authorized
установлено на false
), и самоподписанное соединение привело к ошибке:
Error: self signed certificate
at TLSSocket.onConnectSecure (_tls_wrap.js:1501:34)
at TLSSocket.emit (events.js:315:20)
at TLSSocket._finishInit (_tls_wrap.js:936:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:710:12) {
code: 'DEPTH_ZERO_SELF_SIGNED_CERT'
}