Heroku上的HTTPS + SSL - Node + Express

时间:2014-08-05 21:19:36

标签: node.js ssl heroku https

我已经在Heroku上创建了一个self-signed certificateadded it to Heroku并配置了一个SSL端点,并且我似乎在那里heroku certs:info

我正在Express上创建我的服务器:

var server = require('http').createServer(app);

然后像这样重定向到https

app.use(function(req, res, next) {
    var reqType = req.headers["x-forwarded-proto"];
    reqType == 'https' ? next() : res.redirect("https://" + req.headers.host + req.url);
});

服务器运行正常,但我在S.O.上遇到了这段代码片段。创建https服务器:

var keys_dir = './sslcert/';
var server_options = { 
  key  : fs.readFileSync(keys_dir + 'server.key'),
  ca   : fs.readFileSync(keys_dir + 'server.csr'), 
  cert : fs.readFileSync(keys_dir + 'server.crt') 
}

var server = require('https').createServer(server_options,app);

我没有像这个例子那样指向证书/密钥,我的网站在https上运行(虽然锁是红色的,因为它是自签名的)。

  • 所以我的问题是,如果我没有明确指出他们的密钥/证书,我的服务器如何知道server_options的代码段?这是Heroku在幕后照顾的吗?

  • 我在Heroku上设置的SSL端点如何与我使用http创建的var server = require('http').createServer(app);服务器进行交互?


修改

我就这样回答another question

“在Heroku的负载均衡器上发生SSL终止;它们会发送您的应用简单(非SSL)流量,因此您的应用应该创建一个非HTTPS服务器。”

  • they send your app plain (non-SSL) traffic究竟是什么意思?这是否意味着我不必在我的应用中重定向到https

1 个答案:

答案 0 :(得分:34)

在流量到达您的应用程序之前,在Heroku服务器/负载均衡器上完成SSL终止。 """你添加的证书不是你的dyno,而是Heroku控制的服务器。

因此,当SSL(https)流量进入时,它会被停止" (终止)在服务器上。该服务器打开一个与你的dyno的新 http 连接,无论它通过https发送回客户端。

所以在你的dyno你不需要"混乱"使用证书等,您将只看到传入的 http 流量:无论是直接来自http客户端,还是来自Heroku服务器,他们将https发送给客户端,http发送给您。

重定向到https是另一回事:如果客户"来了"使用http到你的应用程序,你更喜欢使用https,无论如何重定向。他们将发出新请求,这次是https,然后通过Heroku的SSL终止,再到您的应用。但现在你知道客户端和Heroku之间的路径是安全的(由于客户端使用https),Heroku SSL终端和你的dyno之间的路径可能是安全的(如果你信任Heroku ......)

HTH