Heroku上的HTTPS + SSL – Node + Express

我创build了一个自签名证书 , 将其添加到Heroku ,并在Heroku上configuration了一个SSL端点,并且logging了heroku certs:info似乎在那里。

我正在快速创build我的服务器,如下所示:

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

然后redirect到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); }); 

服务器运行正常,但是我遇到这个代码片断SO创build一个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); 

我不指向这个例子中的certs / keys,而且我的网站是在https上运行的(尽pipe这个锁是红色的,因为它是自签名的)。

  • 所以我的问题是,我的服务器如何知道我的钥匙/证书没有我明确地指向他们像server_options代码片段? Heroku在幕后是否照顾过?

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


编辑

我只是这样回答另一个问题 :

“Heroku的负载平衡器发生SSL终止,他们发送您的应用普通(非SSL)stream量,所以您的应用程序应该创build一个非HTTPS服务器。

  • they send your app plain (non-SSL) traffic意味着什么? 这是否意味着我不必在我的应用程序中redirect到https

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

所以当SSL(https)stream量进入时,它在服务器上“停止”(终止)。 该服务器打开一个新的http连接到你的dyno,无论是得到它通过https发送回到客户端。

所以在你的dyno中,你不需要与证书等“混淆”,你将只能看到传入的httpstream量:不pipe是直接来自http客户端,还是来自https客户端和http的Heroku服务器。

redirect到https是一个不同的问题:如果一个客户端通过http“来”到你的应用程序,并且你更喜欢他们使用https,那么通过redirect。 他们会发出一个新的请求,这次https,并通过Heroku的SSL终止,然后到您的应用程序。 但现在你知道客户端和Heroku之间的path是安全的(由于客户端使用https),Heroku SSLterminal和你的dyno之间的path大概是安全的(如果你信任Heroku …)

HTH