我可以在Node.js / express.js中限制TLS消息的长度吗?

时间:2018-01-25 16:49:05

标签: node.js express ssl tcp mbedtls

我有一个Node.js服务器通过HTTPS提供(相当大)的文件。使用"正常" HTTPS客户端,一切都按预期工作。但我的主要用例是将这些文件提供给嵌入式系统(大文件是固件映像)。

嵌入式系统使用mbedTLS库创建到我的节点服务器的安全SSL / TLS连接,并发送HTTPS请求以下载文件。服务器忠实地回复HTTP-body中的文件作为八位字节流。

async function createServer({ port, keys, cert }) {
  const app = express()
  app.use('/', express.static('images'))

  https.createServer({ key: keys.privateKey, cert }, app).listen(port, '0.0.0.0')
}

问题:由于嵌入式系统的内存限制,我的客户端的最大消息缓冲区大小为4096字节。但是服务器以更大的块发送数据(例如,每个消息16408字节)。给定小缓冲区并且拒绝解密数据时,mbedTLS无法处理那些大型消息。

我可以以某种方式告诉Node限制它可以在一条TLS消息中发送的数据量吗?

1 个答案:

答案 0 :(得分:2)

您是否尝试过这样的highWaterMark选项:

function createServer({ port, keys, cert }) {
  const app = express()
  app.use('/', express.static('images', { highWaterMark: 1024 * 4 }))

  https.createServer({ key: keys.privateKey, cert }, app).listen(port, '0.0.0.0')
}

传递给express.static的选项将传递给内部创建的基础fs.createReadStream。请查看fs.createReadStream here的官方文档。