【发布时间】:2014-09-28 16:29:54
【问题描述】:
我创建了一个self-signed certificate、added it to 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);
});
服务器运行良好,但是我在 S.O. 上遇到了这段代码 sn-p。创建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的代码 sn-p 那样明确指向它们?这是 Heroku 在幕后处理的吗?我在 Heroku 上设置的 SSL 端点如何与我使用
var server = require('http').createServer(app);创建的http服务器交互?
编辑
我只是在another question上回答这个问题:
“SSL 终止发生在 Heroku 的负载均衡器上;它们向您的应用发送纯(非 SSL)流量,因此您的应用应该创建一个非 HTTPS 服务器。”
-
they send your app plain (non-SSL) traffic到底是什么意思?这是否意味着我不必在我的应用中重定向到https?
【问题讨论】:
-
“我已经创建了一个自签名证书,并将其添加到 Heroku...” - 您可以从 @987654324 获得免费的 1 类服务器证书@ 或 CAcert。我不确定它们是否针对子域发布,但因为它们已经过域验证。
-
我实际上是在两天前购买了一个证书,但在设置它之前我转移了我的域(第一个主机上的错误决定)。所以我正在等待转移通过,然后将使用购买的证书......但是,我仍然想了解发生了什么。