Nodejs:如何拒绝SNI回调中的连接?

时间:2017-03-11 13:28:31

标签: node.js https

我目前正在使用Node.js v7.7.2。这是我简化的https服务器设置:

const branyaContext = tls.createSecureContext({
    key: fs.readFileSync('./cert/ecdsa.key'),
    cert: fs.readFileSync('./cert/chained.pem')
});


const options = {
    SNICallback: function (domain, cb) {
        if ((domain === 'branya.cat') || (domain === 'www.branya.cat')) {
            cb(null, branyaContext);
        }
    },
    ciphers: [
        "ECDHE-ECDSA-AES128-GCM-SHA256",
        "ECDHE-ECDSA-AES128-SHA",
        "!RC4",
        "!AES256"
    ].join(':'),
    honorCipherOrder: true
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world\n');
}).listen(8000);

当我尝试用我的服务器卷曲时(DNS已将我的测试域指向我的IP)

curl https://test.branya.cat/ --head -v

连接似乎停留在

* TLSv1.2 (OUT), TLS handshake, Client hello (1):

所以,我的问题是:

  1. 作为服务器,最好让连接保持打开状态,直到超时到期或立即关闭?
  2. 我如何拒绝这种联系?
  3. 已经回答了:

    感谢robertklep的评论。现在我将SNICallback更改为:

    if ((domain === 'branya.cat') || (domain === 'www.branya.cat')) {
        cb(null, branyaContext);
    } else {
        cb();
    }
    

    这会导致无效连接立即关闭:

    * TLSv1.2 (IN), TLS alert, Server hello (2):
    * error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
    * Closing connection 0
    curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
    

    服务器端的连接也正常关闭。 (我查看了server.getConnections)。

    另外,根据robertklep的评论,关闭连接以防止DoS攻击是最好的做法。

0 个答案:

没有答案