【问题标题】:can node HTTPS server be created without public and private keys?可以在没有公钥和私钥的情况下创建节点 HTTPS 服务器吗?
【发布时间】:2018-04-27 18:03:51
【问题描述】:

我正在使用 expressjs 创建一个 http/https 服务器。

有一种情况,服务器无法从目录中获取公共和私有证书文件。

在这种情况下,我使用 http 创建服务器并将原始 HTML 文件发送到客户端,表明存在问题,但问题就在这里, 用户不知道他们需要移动到 http 网址而不是 https 才能查看 HTML 文件。

当我的用户尝试访问 http URL

时,有没有办法可以将我的用户重定向到 https url
init.js
    try {
      // options = get public and private certificate file
    } catch(e) {
      // accessError
    }

    if(accessError) {
     server = http.createServer();
    } else {
      server = https.createServer(options, (req, res) => {
         res.writeHead(200);
         res.end('hello world\n');
      });
     );
    }

server.listen(8080);


app.js

let app = require('express');

app.use((req, res, next) => {
   if(accessError) {
     res.sendFile(index.html);
   } else {
     next();
   }
});

index.html
<h1> there was an error <h1>

【问题讨论】:

  • 如果没有有效的证书,浏览器不能(也不会)信任来自您服务器的任何数据,包括任何迁移到 http 的指示。这就是证书的基本用途。

标签: node.js express


【解决方案1】:

您可以尝试301 Redirect,例如answer to this question

每当有人尝试访问资源的 http 变体时,他们都会被重定向到 https 。

作为设计决策,我将无法检索证书视为致命错误。我想您在开始时正在阅读它们。如果由于某种原因您无法阅读它们,您应该终止应用程序并记录异常。您确实需要进行一些监控,以注意到该事物尚未开始,并在您找不到它时采取相应的行动。但是显示错误页面似乎比它的价值更麻烦。您将使应用程序处于 up 状态,但实际上并非如此。因为它不能做任何事情,你需要依靠客户告诉你它不起作用,并且有一个与 https 相关的消息等。最好努力失败。

【讨论】:

  • 我同意你的观点,最好是努力失败。但我想知道其他网站是如何做到的,当某些服务器出现故障时,它们会显示一些简洁的 HTML。可能他们正在重定向到其他一些正在运行的 URL 站点。
  • 很大程度上取决于错误。如果它与此一样重要,或者无法加载一些需要的数据文件等。它们也会严重失败,你将看不到任何东西,因为不会有任何东西在运行。如果这是一个较软的错误,例如无法发出 API 请求,它们只会生成一个“错误页面”,而不是常规页面。或者,如果它是一个 API,它将返回一个错误代码,并且调用页面将显示一条错误消息。没有一刀切的方法,但有一些值得遵循的做法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多