我已经创建了一个自签名证书,将其添加到Heroku,并在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); });
服务器运行正常,但我在SO上遇到了这个代码片段来创建一个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上运行(尽管锁是红色的,因为它是自签名的).
所以我的问题是,我的服务器如何知道我的密钥/证书,而没有我像代码片段那样明确地指向他们server_options
?这是Heroku在幕后照顾的吗?
我在Heroku上设置的SSL端点如何与http
我创建的服务器交互var server = require('http').createServer(app);
?
编辑
我就这个问题回答另一个问题:
"SSL终止发生在Heroku的负载均衡器上;它们发送您的应用普通(非SSL)流量,因此您的应用应该创建一个非HTTPS服务器."
究竟they send your app plain (non-SSL) traffic
是什么意思?这是否意味着我不必重定向到https
我的应用程序?
Nitzan Shake.. 37
在流量到达您的应用程序之前,在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
在流量到达您的应用程序之前,在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