NodeJS-处理TLS重新协商客户端

时间:2019-05-10 20:08:26

标签: node.js

我有一个带有一些API端点的Node.js服务器。其中之一需要通过SSL证书进行客户端身份验证。如果我使用Firefox或Chrome浏览器访问此终结点,但不使用自定义nodejs客户端,则效果很好。

const https = require('https');
const fs = require('fs');

const options = {
  hostname: 'localhost',
  port: 1337,
  path: '/api/nodes_endpoint/json/20?data=eeeeeee',
  method: 'GET',
  key: fs.readFileSync('/home/jose/Escritorio/test.key'),
  cert: fs.readFileSync('/home/jose/Escritorio/test.cert'),
  rejectUnauthorized: false
};

options.agent = new https.Agent(options);

const req = https.request(options, (res) => {
  console.log('statusCode:', res.statusCode);
  console.log('headers:', res.headers);

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (e) => {
  console.error(e);
});
req.end();

服务器请求TLS重新协商后,应包含客户端证书的对象为NULL,因此我认为客户端未正确处理TLS重新协商。

1 个答案:

答案 0 :(得分:1)

经过大量搜索,我找到了Github Issue的解决方案。

通过添加

解决
  

secureOptions:常量。SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION

创建https服务器时的选项:

https.createServer({ secureOptions: ... })