我有一个带有一些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重新协商。
答案 0 :(得分:1)
经过大量搜索,我找到了Github Issue的解决方案。
通过添加
解决secureOptions:常量。SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
创建https服务器时的选项:
https.createServer({ secureOptions: ... })