我目前正在使用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):
所以,我的问题是:
已经回答了:
感谢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攻击是最好的做法。