我试图将两个独立域指向我的node.js服务器。一切都很好,但HTTPS。 我意识到我在单个Web服务器上使用两个独立的HTTPS地址的唯一选择是使用SNI,但我无法在我的节点服务器中使用它。 以下是我尝试做的一个简单示例:
'use strict';
var crypto = require('crypto');
var https = require('https');
var fs = require('fs');
var options = {
key: fs.readFileSync('ssl/server.key'),
passphrase: 'something',
cert: fs.readFileSync('ssl/xxx.crt'),
ca: fs.readFileSync('ssl/ca.crt'),
// Dynamic certificate check
SNICallback: function (servername) {
console.log('sni:', servername); // This function is never called
}
};
https.createServer(options, function (req, res) {
req.on('end', function () {
res.writeHead(200, {'Content-Type':'application/json'});
res.end('{}');
});
}).listen(443);
我知道所有浏览器都不支持SNI,它只适用于TLS,但我使用Chrome 36,Firefox 30和IE 10进行了测试。
我还测试了将secureProtocol
更改为'TLSv1_method'
和'SSLv3_method'
,但它也没有用。
有没有让它发挥作用? 还有其他解决方案不需要SNI吗?它与节点无关但我知道GNU中有一个gnutls_certificate_set_retrieve_function2函数。