Elastic beanstalk 请求上的 Node.js 是 HTTPS,但 express 是作为 HTTP 服务的。这安全吗?

Posted

技术标签:

【中文标题】Elastic beanstalk 请求上的 Node.js 是 HTTPS,但 express 是作为 HTTP 服务的。这安全吗?【英文标题】:Node.js on Elastic beanstalk requests are HTTPS but express is served as HTTP. Is this secure? 【发布时间】:2019-04-19 22:57:52 【问题描述】:

我有一个托管在 AWS 弹性 beanstalk 上的 node express 项目。当我检查开发工具中的网络选项卡时,我的请求是 HTTPS。但是,我的 node express 应用程序的代码是在 HTTP 中提供的。我需要将“http”模块更改为“https”吗? 如果我这样做了,我是否必须在 AWS 的某个地方提供一些密钥?

const http = require('http');
const app = require('./app');

const normalizePort = val => 
  var port = parseInt(val, 10);

  if (isNaN(port)) 
    // named pipe
    return val;
  

  if (port >= 0) 
    // port number
    return port;
  

  return false;
;


const onListening = () => 
  const addr = server.address();
  const bind = typeof addr === "string" ? "pipe " + addr : "port " + port;
  //debug("Listening on " + bind);
;

const port = normalizePort(process.env.PORT || "8081");
app.set("port", port);

const server = http.createServer(app);
server.on("error", onError);
server.on("listening", onListening);
server.listen(port);

【问题讨论】:

【参考方案1】:

您不必将其更改为 HTTPS。

当您使用 AWS EB 时,您会在用于反向代理到您的应用程序的每台机器上获得带有证书 + nginx 的负载均衡器 (ELB)。

AWS 免费帮助您保护与负载均衡器的连接。

是否要添加额外的安全层由您决定。

对于大多数用例,除非您真的处理非常敏感的数据(医疗、工业),否则第一层已经足够好,并且将保持与 ELB 的所有连接安全且不受影响。

如果您确实想添加额外的安全层,您可以使用“让我们加密”创建证书,将密钥保存在您的机器上,然后使用 https 启动服务器并配置密钥。

看看: https://www.sitepoint.com/how-to-use-ssltls-with-node-js/

它正在使用 certbot(让我们加密 cli ...)

【讨论】:

以上是关于Elastic beanstalk 请求上的 Node.js 是 HTTPS,但 express 是作为 HTTP 服务的。这安全吗?的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 上的“laravel.log 无法打开”错误

原始 IP 未传递到 AWS Elastic Beanstalk 上的单个容器 Docker 映像上的容器

Elastic Beanstalk 上的 Sidekiq 进程 - Errno::ENOENT:没有这样的文件或目录 - getcwd

Elastic Beanstalk EC2 实例在端口 5000 和端口 80 上响应 http 请求

elastic-beanstalk http请求超时

带有负载均衡器的 AWS Elastic Beanstalk Linux 托管实例上的 ASP.NET Core 3.1 - HTTPS