【发布时间】:2020-11-24 12:29:36
【问题描述】:
我正在尝试与 Node.js 中的 Electrum 服务器建立 TLSSocket 连接。为此,我想允许自签名证书,但我确实想在连接使用自签名证书时通知/记录。
为了允许自签名证书,我在连接时使用了rejectUnauthorized: false 选项。这按预期工作。但是,根据Node TLS docs,当授权失败时,连接的套接字应该同时报告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 具有 CA 签名证书,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'
}
【问题讨论】:
标签: javascript node.js sockets ssl