首页 > 解决方案 > Nodejs如何从https服务器获取TLS对象

问题描述

我正在使用使用 nodejs 的 https 服务器。出于安全原因,我必须更改某些 ssl 参数。更具体地说,我必须设置/禁用“客户端重新协商限制”。

根据此处的标准文档,我必须将 tls.CLIENT_RENEG_LIMIT 设置或更改为我的值。

因为,我使用的是 https 模块,所以我可以访问 https 服务器。我的问题是如何从 https 服务器获取 tls 对象,以便我可以设置值。

我知道我可以在创建 https 服务器时设置一些选项,如下所示。

const options = {
  key: fs.readFileSync('app-key.pem'),
  cert: fs.readFileSync('app-cert.pem'),
  secureOptions: constants.SSL_OP_NO_SSLV2 | ...,
  ciphers: [...]
}

但是,如果我要为 tls.CLIENT_RENEG_LIMIT 或 tls.CLIENT_RENEG_WINDOW 等添加值,我不确定要设置什么。我假设有某种方法可以获得一个 tls 句柄,通过它我可以设置这些。

这里有什么帮助...?

标签: node.jssslhttps

解决方案


您无法TLS从 https 服务器对象获取对象,但您可以使用内置模块tls设置所需的选项。在创建https服务器之前,您可以将值设置为:

   const tls  =  require('tls')
    
    tls.CLIENT_RENEG_LIMIT = ' required value'
    
    const options = {
      key: fs.readFileSync('app-key.pem'),
      cert: fs.readFileSync('app-cert.pem'),
      secureOptions: constants.SSL_OP_NO_SSLV2 | ...,
      ciphers: [...]
    }
    
const server = https.createServer(options,function(req,res){
     res.writeHead(200);
     res.end('hello world\n');
    })

server.listen(8080);

TLSv1.3 不支持重新协商。

https模块依赖于tls,因此您设置的任何有效值tls都将适用于https

您不能CLIENT_RENEG_LIMIT作为https选项传递,因为 options <Object>接受来自 tls.createServer()tls.createSecureContext()的 选项http.createServer()

请参阅 tls.createServer 选项


推荐阅读