无法通过节点和 express (https) 找出 SSL

Can't figure out SSL with node and express (https)

我一直致力于制作一个网站,但在让我的网站正常运行后,我开始尝试获取 SSL,这样恼人的“警告”符号就会消失。不幸的是,我陷入了真正的僵局,我找到的所有帮助我解决这个问题的资源似乎都已经过时,或者至少与我正在做的事情不兼容。

我原来的工作 server.js 文件:

const express = require('express');
const path = require('path');
const app = express();
const port = process.env.PORT || 3000;

app.get('/', function(req, res) {
  res.sendFile(path.join(__dirname, '/index.html'));
});

app.listen(port);

我试过但最终不起作用的方法:

const fs = require('fs');

const options = {
  cert: fs.readFileSync('cert/certificate.crt'),
  ca: fs.readFileSync('cert/ca_bundle.crt'),
  key: fs.readFileSync('cert/private.key')
};

const express = require('express');
const path = require('path');
const app = express();
const port = process.env.PORT || 3000;
const httpsPort = process.env.PORT || 3030;

app.get('/', function(req, res) {
  res.sendFile(path.join(__dirname, '/index.html'));
});

app.listen(port);
httpsPort.createServer(options, app).listen(httpsPort);

自从我开始处理这个 https 问题以来,我一直在努力思考整个项目。 将不胜感激!

嗯,这里有一些问题。首先,您尝试 listen 两件不同的事情。 app.listenhttp.createServer({ ...options }, app) 的缩写。

其次 - 您的代码是 httpsPort.createServer(options, app).listen(httpsPort);,基本上可以转换为 3030.createServer(options, app).listen(3030)。这是我通常做的事情:

const https = require('https');
const server = https.createServer(options, app).listen(port)

如果你想同时支持两者,那么你需要同时包含 httphttps 包,并且有一个 if-else(或类似的东西)以便你使用正确的包创建服务器。

在这种情况下,您应该不要在应用程序上收听!