【问题标题】:TLSSocket not reporting authorized and authorizationError correctlyTLSSocket 未正确报告授权和授权错误
【发布时间】: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


    【解决方案1】:

    在开始输入这个问题之前,我已经为这个问题苦苦挣扎了一段时间。在我写出完整的问题后,我想出了答案,所以我决定仍然发布问题并自己提供答案。

    TLSSocket 上的'connect' 事件继承自未加密的net.Socket。所以在这种情况下,这是错误的监听事件。相反,您应该监听'secureConnect' 事件。当我们将原问题中的事件监听代码改为:

    socket.on('secureConnect', () => {
      console.log(`Successfully connected to ${host}:${port}`);
      console.log(socket.authorized);
      console.log(socket.authorizationError);
    })
    

    结果完全符合预期。也就是说,CA 签名的连接报告truenull,而自签名的连接报告falseDEPTH_ZERO_SELF_SIGNED_CERT

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 2017-05-14
      相关资源
      最近更新 更多