当前位置: 首页 > 面试题库 >

Heroku上的HTTPS + SSL-Node + Express

齐建白
2023-03-14
问题内容

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

我没有像这个示例那样指向证书/密钥,并且我的站点正在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在应用程序中重定向到?

问题答案:

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

因此,当SSL(https)流量进入时,它在服务器上“停止”(终止)。该服务器将打开一个新的 http
连接到您的dyno,无论获得什么,它都会通过https发送回客户端。

因此,在您的dyno上,您不需要“打扰”证书等,并且您只会看到传入的 HTTP
流量:无论是直接来自http客户端,还是来自与客户端和https进行HTTP对话的Heroku服务器。

重定向到https是另一回事:如果客户端使用http“进入”您的应用程序,而您更喜欢它们使用https,则绝对是重定向。他们将发出一个新请求,这次是https,然后通过Heroku的SSL终止,然后到达您的应用程序。但是现在您知道客户端和Heroku之间的路径是安全的(由于客户端使用https),并且Heroku
SSL终止和您的dyno之间的路径大概是安全的(如果您信任Heroku …)

高温超导



 类似资料:
  • 我已经创建了一个自签名证书,将其添加到Heroku,并在Heroku上提供了一个SSLendpoint,我记录到< code>heroku certs:info它似乎在那里。 我正在Express上创建我的服务器,如下所示: 然后重定向到,如下所示: 服务器运行良好,但是我在S.O .上看到了下面的代码片段,创建一个< code>https服务器: 我没有像这个例子那样指向证书/密钥,我的站点是在

  • > CNAME记录@myapp.herokuapp.com。1分钟 CNAME记录www.myapp.herokuapp.com。1分钟 URL重定向记录@https://www.myapp.herokuapp.com。未蒙面的 我在Heroku中的DNS配置: > *.mywebsite.com mywebsite.com 这使得https://mywebsite.com的证书无效,我想是因为主

  • 问题内容: 我有一个应用程序在heroku上运行,并在带有https的节点上运行express。如何确定协议,以在Heroku上使用nodejs强制重定向到https? 我的应用程序只是一个简单的http服务器,它(尚未)意识到heroku正在向其发送https请求: 问题答案: 答案是使用Heroku传递给它的代理thingamabob时使用的“ x-forwarded-proto”标头。(旁注

  • 问题内容: 我已经配置了SSL enpoint,并且可以确认它正在工作。当我进入日志时,会看到以下内容: 我试图追踪有关退出代码143的一些信息,以及为什么所有进程都被停止。签出以下服务器文件: 感谢您的提前反馈。如果需要,我可以提供更多详细信息。 ------解决方案(编辑)------- 请参阅下面的答案。 问题答案: 我在这里找到了答案:ExpressJS节点HTTPS服务器上的Heroku

  • 我在Heroku上成功运行了一个节点应用程序。我已经购买了加急SSL证书,一切正常。我去https...并获得一个完整的“绿色条”,证明该站点是通过https提供服务的 但是,非 SSL 标准 http 仍然可用。如何强制应用通过 https 提供服务?谢谢

  • 问题内容: 我正在尝试在我的Node.js服务器(Expressjs框架)上实现HTTPS。我有自己的签名证书和密钥,以及用于测试/开发的自签名证书/密钥: 我还在Heroku上设置了SSL端点。一切正常,并且Endpoint似乎正常运行,但是当我在生产环境中(在Heroku上)运行应用程序时,出现了H13应用程序错误。有趣的是(或者不是),如果我告诉express创建一个HTTP服务器:它可以工