Heroku上的HTTPS + SSL - Node + Express

 叹号妈咪_790 发布于 2022-12-29 19:38

我已经创建了一个自签名证书,将其添加到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

1 个回答
  • 在流量到达您的应用程序之前,在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

    2022-12-29 19:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有